我如何使用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, …