背景:我试图使用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插件,它将帮助您创建插件的模板。
另外,请注意,PyQt5仅支持qgis 3+。对于以前的版本,请使用PyQt4。