2016-06-27 14 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

私は自分の問題を理解しました。 「窓は、少なくともdidnのように、しばらく一度の

QtGui.QApplication.processEvents() 

この私のUIの更新をしてみましょう:それは総修正はありませんが、私は視覚化が追加されている場所に至るまで戻って、定期的にこの関数を呼び出す必要がありましたハングアップします。また、メインウィンドウを無効にして、グラフが生成されている間にユーザーを混乱させないようにして、元の投稿からLoading Windowを追加して、ユーザーが何が起きているかを知るようにした方がよいと考えました。

関連する問題