我需要在我的PyQt应用程序中显示一些图表,所以我写下了这些代码。 这是作品,但有时画图会花费很多时间,它会“冻结”主窗口。如何在PyQt的另一个线程中运行Matplotlib
我觉得在另一个线程中应该解决它。但我该怎么做呢? 或者,还有另一种在“非块”模式下绘制图表的方法?
from PyQt4 import QtGui
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
class MplCanvas(FigureCanvas):
def __init__(self):
self.fig = Figure()
self.axes = self.fig.add_subplot(111)
# do something...
FigureCanvas.__init__(self, self.fig)
FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
# do something...
def draw(self):
# do something...
现在实施类似的。这是我的想法。你必须使用多个类,一个是基于PyQt的QDialog或类似的GUI输出。另一个是基于QThread的工人类。一旦QThread完成绘图,它将使用PyQt信号引擎将图形和画布实例传递给GUI对象。我尝试将QDialog和QThread组合到一个类中,但显然你不能这样做。 (我相信你可以做到,但使用2个独立的类更容易) – Barmaley