背景:
我正在尝试使用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。

10-06 05:21