python Pyqtgraph与PySide6配合使用时的递归错误

0s7z1bwu  于 2022-12-17  发布在  Python
关注(0)|答案(3)|浏览(277)

我在用PySide6实现pyqtgraph时遇到了麻烦,我已经顺利地用PyQt5实现了pyqtgraph,但是我正在用PySide6专门为一个新项目创建一个新应用程序。
我检查了pyqtgraph文档,它说在pyqtgraph之前导入您的Qt Package 器,这样它就知道要使用哪个。

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())

我收到一个“递归错误:调用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)

Edit2:这是发生在以下位置的错误:self.plot1 = pg.绘图小部件()文件“..\Python\Python310\lib\站点包\pyqtgraph\小部件\绘图小部件. py”,第51行,在init图形视图中。init(自,父,背景=背景)
文件“..\Python\Python 310\lib\站点包\pyqtgraph\widgets\图形视图. py”,第73行,在initself中。使用OpenGL(使用OpenGL)
文件“..\Python\Python 310\lib\站点包\pyqtgraph\widgets\图形视图. py”,第168行,正在使用OpenGL自定义.setViewport(v)
文件“..\Python\Python310\lib\站点包\pyqtgraph\widgets\PlotWidget.py”,第78行,在getattr中,如果有属性(self.plotItem,attr):
文件..\Python\Python310\lib\站点包\pyqtgraph\widgets\PlotWidget.py”,第78行,在getattr中,如果有属性(self.plotItem,attr):
文件“..\Python\Python310\lib\站点包\pyqtgraph\widgets\PlotWidget.py”,第78行,在getattr中,如果有属性(self.plotItem,attr):[上一行重复了988次]递归错误:调用Python对象时超出最大递归深度
进程已完成,退出代码为1

a7qyws3x

a7qyws3x1#

好的,我明白了。pyqtgraph与PySide6的snake_case特性不兼容。我认为删除它不会有影响,但它仍然导入了使用它的脚本。

kgsdhlau

kgsdhlau2#

我想你需要def __init__(self):之后的super(MainWindow, self).__init__()
这样对我很好

#!/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()
uinbv5nw

uinbv5nw3#

我遇到了同样的问题,并找到了答案:更新你的pyqtgraph版本

相关问题