2016-06-27 47 views
0

我有一個程序,它使用嵌入的matplotlib圖形繪製數據並添加有用的可視化。問題是matplotlib可能會非常緩慢時,這些可視化是沉重的,主窗口掛起點。我不能在不同的線程或進程中添加這些圖形,因爲PyQt禁止從主線程(除了主要線程)之外的任何地方更新主窗口,所以我想要另一個基本上具有永久進度條的窗口,我可以當圖形完成時,殺:在PyQt4中創建一個加載窗口

# 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

我想通了我的問題。這不是一個總的修復,但我不得不通過向回去被添加的可視化,其中並定期調用這個函數:在一段時間

QtGui.QApplication.processEvents() 

這讓我的UI更新每隔一段時間,使窗口至少沒」掛起。我還認爲最好禁用主窗口,以便在生成圖形時用戶不會搞砸,並且我從原始帖子添加了加載窗口,以便用戶知道發生了什麼。