【发布时间】:2013-01-24 00:49:18
【问题描述】:
我需要在我的 PyQt 应用程序中显示一些图表,所以我记下了这些代码。 这是可行的,但有时,绘制图表会花费大量时间,它会“冻结”主窗口。
我认为在另一个线程中执行应该可以解决它。但是我该怎么做呢? 或者,还有另一种“非阻塞”模式绘制图表的方法?
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 个单独的类更容易)
标签: python matplotlib pyqt4