背景:
我正在尝试使用QT设计器表单作为QGIS属性表单(这很好并且可以正常工作),但是用于此目的的代码并未遵循我能找到的任何文档或示例。从2007年开始,我确实发现了一点点信息,这至少使我得以开展很多工作,但我觉得它效率极低。
问题:
从QGIS中的对话框形式访问事件(closeEvent)。
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Message box')
self.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
我从Zetcode Link获得了这段代码,我确定它可以独立于pyqt5使用,但是如果我尝试在qgis中使用它,则会使整个应用程序崩溃。我相信这是因为QGIS是应用程序,而对话框位于该对话框下,因此该事件可能以不同的方式链接到该对话框,并且不确定如何访问该对话框。有谁知道我如何访问使用QGIS属性形式创建的对话框的关闭事件。
最佳答案
您不能像使用独立应用程序那样使用PyQt,请查看以下内容:developing-python-plugin
在您的代码中,您将实例化一个新的QApplication,您的父应用程序应为QGis;参见QgsInterface类
pyqgis文档还建议使用pluginbuilder插件,这将帮助您创建插件的模板。
另外,请注意,只有qgis 3+支持PyQt5。对于以前的版本,请使用PyQt4。