首页 > 解决方案 > 如何从 python 应用程序运行 qt 小部件 pyqtgraph

问题描述

我在 tkinter 上运行的带有 GUI 的 python 应用程序运行良好。我需要从显示图形的 pyqtgraph 中实现 qt 小部件(大量数据,因此 matplot lib 无法做到这一点)。我导入需要的 Qt 东西:

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui

并在 tkinter 类的某处以下代码在新窗口中打开它并显示图表:

def preview_show():
    APP = QtGui.QApplication([])
    ## Define a top-level widget to hold everything
    win = QtGui.QWidget()
    ## Create a grid layout to manage the widgets size and position
    layout = QtGui.QGridLayout()
    win.setLayout(layout)

    pl = pg.PlotWidget()
    pl.plot(self.DataSeries, pen=(255, 0, 0), name="Red curve")
    layout.addWidget(pl)

    win.show()
    APP.exec_()

然后,这个小部件有一些功能可以通过右键单击图表来访问,我需要它们(比如导出图像)。但是,当我尝试单击其中任何一个功能时 - python 内核崩溃,错误代码为 255。我知道 qt 事件未得到处理。所以我尝试从python循环调用Qt事件处理程序,而不是调用APP.exec_():

while TRUE:
    APP.processEvents()
    time.sleep(0.002)

但它以相同的方式运行(带有图形的窗口打开,但在尝试访问其他内置函数时冻结)。我正在考虑在单独的线程中运行 Qt 小部件,但如果我不能在循环中执行此操作,那么我认为它也不会在线程中运行。

我读过这个Python 与 Qt、事件循环一起工作,但它对我不起作用。

所以问题是 - 如何在所有内置函数运行的情况下正确处理来自 tkinter 应用程序的 Qt 小部件(在单独的窗口中)?我对由 tkinter 应用程序处理错误的 qt 事件引起的问题是正确的吗?

标签: pythonpysidepyqtgraph

解决方案


推荐阅读