我在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 working with Qt, event loop,但对我来说不起作用。
问题是-如何在运行所有内置函数的情况下(在单独的窗口中)正确地从tkinter应用处理Qt小部件?我对由tkinter应用处理错误的qt事件引起的问题是否正确?