QThreadとPyQGISを使用してレスポンシブGUIを維持するにはどうすればよいですか
QGIS 1.8のPythonプラグインとしていくつかのバッチ処理ツールを開発しています。 ツールの実行中にGUIが応答しなくなることがわかりました。 一般的な知恵は、作業はワーカースレッドで行われ、ステータス/完了情報がシグナルとしてGUIに返されることです。 私は川岸のドキュメントを読んで、doGeometry.py(ftoolsからの実用的な実装)のソースを研究しました。 これらのソースを使用して、確立されたコードベースに変更を加える前にこの機能を調べるために、簡単な実装を構築しようとしました。 全体的な構造は、プラグインメニューのエントリであり、開始ボタンと停止ボタンのあるダイアログを開きます。ボタンは100までカウントするスレッドを制御し、各番号のシグナルをGUIに送り返します。GUIは各信号を受信し、メッセージログとウィンドウタイトルの両方を含む文字列を送信します。 この実装のコードは次のとおりです。 from PyQt4.QtCore import * from PyQt4.QtGui import * from qgis.core import * class ThreadTest: def __init__(self, iface): self.iface = iface def initGui(self): self.action = QAction( u"ThreadTest", self.iface.mainWindow()) self.action.triggered.connect(self.run) self.iface.addPluginToMenu(u"&ThreadTest", self.action) def unload(self): self.iface.removePluginMenu(u"&ThreadTest",self.action) def run(self): BusyDialog(self.iface.mainWindow()) class BusyDialog(QDialog): def __init__(self, parent): QDialog.__init__(self, …