【发布时间】:2022-12-16 23:08:41
【问题描述】:
我在使用 PySide6 实现 pyqtgraph 时遇到问题。我已经将 pyqtgraph 与 PyQt5 一起使用,但我正在 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())
我在 self.graph_widget = pg.PlotWidget() 处触发了“RecursionError: maximum recursion depth exceeded while calling a Python object”
我使用此示例 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)
编辑2: 这是发生在以下位置的错误: self.plot1 = pg.PlotWidget() 文件“..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py”,第 51 行,在在里面图形视图。在里面(自我,父母,背景=背景)
文件“..\Python\Python310\lib\site-packages\pyqtgraph\widgets\GraphicsView.py”,第 73 行,在在里面self.useOpenGL(使用OpenGL)
文件“..\Python\Python310\lib\site-packages\pyqtgraph\widgets\GraphicsView.py”,第 168 行,使用 OpenGL self.setViewport(v)
文件“..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py”,第 78 行,在获取属性如果 hasattr(self.plotItem, attr):
文件 ..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py",第 78 行,在获取属性如果 hasattr(self.plotItem, attr):
文件“..\Python\Python310\lib\site-packages\pyqtgraph\widgets\PlotWidget.py”,第 78 行,在获取属性如果 hasattr(self.plotItem, attr): [上一行重复了 988 次] RecursionError:调用 Python 对象时超出最大递归深度
进程结束,退出代码为 1
【问题讨论】:
-
为了澄清,如果我删除 snake_case 功能,并将方法重命名为 camelCase,我会得到同样的错误。
-
是上面的代码确切地你正在运行的脚本?努力做到完全地最小:删除
plot()行和不必要的导入。此外,尝试在终端或提示中运行该程序以获得更有用的回溯。 -
@musicamante 当我删除“from gui_scripts.tab_plot import PlotTab”行时,它会自行更正,但错误被声明在 MainWindow 中创建绘图小部件的行中。这很令人困惑
-
我想我可能需要重新制作整篇文章
-
请记住这一点以备将来参考,因为这是创建 MRE 几乎总是强制性的众多原因之一。如果您试图使代码尽可能少,您可能已经自己找到了问题的根源。