【问题标题】:Create a loading window in PyQt4在 PyQt4 中创建加载窗口
【发布时间】:2016-10-29 17:51:27
【问题描述】:

我有一个程序,它使用嵌入式 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()

...但是当我创建此类的一个实例时,加载栏没有显示并且两个窗口都挂起。有没有办法让这个窗口出现在一个新的线程或进程中?或者有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: python multithreading matplotlib pyqt pyqt4


    【解决方案1】:

    我发现了我的问题。这不是一个彻底的修复,但我必须回到添加可视化的位置并定期调用此函数:

    QtGui.QApplication.processEvents()
    

    这让我的 UI 每隔一段时间就会更新一次,这样窗口至少不会挂起。我还认为最好禁用主窗口,这样用户就不会在生成图表时搞砸了,我从我的原始帖子中添加了加载窗口,以便用户知道发生了什么。

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 1970-01-01
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      相关资源
      最近更新 更多