首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PySide6实现with图的递归错误

用PySide6实现with图的递归错误
EN

Stack Overflow用户
提问于 2022-08-13 00:01:06
回答 2查看 88关注 0票数 0

我在用PySide6实现pyqtgraph时遇到了问题。我在PyQt5中使用了pyqtgraph,没有任何问题,但是我正在PySide6中专门为一个新项目开发一个新的应用程序。

我检查了pyqtgraph文档,它说在pyqtgraph之前导入您的Qt包装器,这样它就知道该使用哪一个了。

代码语言:javascript
复制
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导入类时,代码就没问题了。那个剧本是

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-13 01:59:52

好吧,我想出来了。pyqtgraph与来自snake_case的PySide6特性不兼容。我认为删除它没有影响,但它仍然在导入一个正在使用它的脚本。

票数 1
EN

Stack Overflow用户

发布于 2022-08-13 00:11:06

我想你需要super(MainWindow, self).__init__()def __init__(self):之后

像这样对我来说很好

代码语言:javascript
复制
#!/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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73340730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档