繁体   English   中英

在PyQt4中创建一个加载窗口

[英]Create a loading window in PyQt4

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

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

我发现了我的问题。 这不是一个完整的解决方案,但我不得不回到添加可视化效果的位置,并定期调用此函数:

QtGui.QApplication.processEvents()

这样一来,我的UI会每隔一段时间进行更新,以使窗口至少不会挂起。 我还认为最好禁用主窗口,以免在生成图形时用户弄乱事情,并且我从原始帖子中添加了“加载窗口”,以便用户知道发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM