我有一个使用嵌入式matplotlib
绘图绘制数据的程序,并添加了有用的可视化。当这些可视化很重时,问题是matplotlib
可能非常慢,直到主窗口挂起。我无法在不同的线程或进程中添加这些图形,因为PyQt禁止从主线程(除了主线程)之外的任何地方更新主窗口,所以我希望有另一个窗口,基本上是一个永久进度条,我可以在完成图表时杀死:
# Creates a new window with an endless progress bar
class LoadingWindow(QtGui.QMainWindow):
def __init__(self):
super(LoadingWindow, self).__init__()
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
main_widget = QtGui.QWidget(self)
layout = QtGui.QVBoxLayout()
layout.addWidget(QtGui.QLabel("Graphing now. Please wait...", self))
progress = QtGui.QProgressBar(self)
progress.setMinimum(0)
progress.setMaximum(0)
layout.addWidget(progress)
main_widget.setLayout(layout)
main_widget.setFocus()
self.setCentralWidget(main_widget)
self.show()
...但是当我创建此类的实例时,加载栏不会显示,并且两个窗口都挂起。有没有办法让这个窗口出现在新的线程或进程中?或者是否有更好的方法来解决这个问题?
答案 0 :(得分:0)
我发现了我的问题。这不是一个全面的修复,但我必须回到可视化添加的位置,并定期调用此函数:
QtGui.QApplication.processEvents()
这让我的UI每隔一段时间更新一次,这样窗口至少不会挂起。我还认为最好禁用主窗口,以便用户在生成图形时不会弄乱,我从原始帖子添加了加载窗口,以便用户知道发生了什么。