我在用PySide6实现pyqtgraph时遇到了问题。我在PyQt5中使用了pyqtgraph,没有任何问题,但是我正在PySide6中专门为一个新项目开发一个新的应用程序。
我检查了pyqtgraph文档,它说在pyqtgraph之前导入您的Qt包装器,这样它就知道该使用哪一个了。
import sys
from PySide6.QtWidgets import QMainWindow, QApplication, QTabWidget
from gui_scripts.tab_plot import PlotTab
import PySide6
import pyqtgraph as pg
from __feature__ import snake_case, true_property
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.graph_widget = pg.PlotWidget()
self.set_central_widget(self.graph_widget)
hour = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temperature = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]
self.graph_widget.plot(hour, temperature)
if __name__ == "__main__":
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec())我得到一个"RecursionError:调用Python时超过最大递归深度“触发,其中self.graph_widget = pg.PlotWidget()
我使用这个示例https://www.pythonguis.com/tutorials/pyside-plotting-pyqtgraph/生成相同的错误,因为我的实际实现跨越了几个脚本。应用程序有一个导航选项卡,可以在几个接口之间切换,其中一个接口将是一个绘图,代码在添加绘图选项卡之前运行得很好。
编辑:当我不从tab_plot导入类时,代码就没问题了。那个剧本是
from PySide6.QtWidgets import QWidget, QGridLayout
import sys
import pyqtgraph as pg
from __feature__ import snake_case, true_property
class PlotTab(QWidget):
def __init__(self, parent):
QWidget.__init__(self)
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
self.parent = parent
self.layout = QGridLayout(self)
self.plot1 = pg.PlotWidget()
self.plot1.setLabel('left', 'Temperature (K)')
self.plot1.setLabel('bottom', 'Voltage (V)')
self.layout.add_widget(self.plot1, 0, 0)"..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py",:这是发生在: self.plot1 = pg.PlotWidget() File Edit2第51行,在init Edit2,background=background中发生的错误。
文件"..\Python\Python310\lib\site-packages\pyqtgraph\widgets\GraphicsView.py",第73行,在init self.useOpenGL(useOpenGL)中
文件"..\Python\Python310\lib\site-packages\pyqtgraph\widgets\GraphicsView.py",第168行,在useOpenGL self.setViewport(v)中
文件"..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py",第78行,在getattr if hasattr(self.plotItem,attr)中:
文件..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py",第78行,在getattr if hasattr(self.plotItem,attr)中:
文件"..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py",第78行,在getattr if hasattr(self.plotItem,attr)中:前面一行重复了988次RecursionError:调用对象时超过了最大递归深度
进程已完成,退出代码为%1
发布于 2022-08-13 01:59:52
好吧,我想出来了。pyqtgraph与来自snake_case的PySide6特性不兼容。我认为删除它没有影响,但它仍然在导入一个正在使用它的脚本。
发布于 2022-08-13 00:11:06
我想你需要super(MainWindow, self).__init__()在def __init__(self):之后
像这样对我来说很好
#!/usr/bin/env python3
from PySide6.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
import sys
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.graphWidget = pg.PlotWidget()
self.setCentralWidget(self.graphWidget)
hour = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temperature = [30, 32, 34, 32, 33, 31, 29, 32, 35, 45]
# plot data: x, y values
self.graphWidget.plot(hour, temperature)
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec()https://stackoverflow.com/questions/73340730
复制相似问题