PyQT5 QGIS对话框交互

时间:2019-01-21 11:43:21

标签: python pyqt5 qgis

背景: 我试图将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属性表单创建的对话框的关闭事件。

2 个答案:

答案 0 :(得分:0)

您不能像使用独立应用程序那样使用PyQt,请查看以下内容:developing-python-plugin

在您的代码中,您将实例化一个新的QApplication,您的父应用程序应为QGis;参见QgsInterface

pyqgis文档还建议使用pluginbuilder插件,这将帮助您创建插件模板。

  

此外,请注意,只有qgis 3+支持PyQt5。对于以前的版本,请使用PyQt4。

答案 1 :(得分:0)

是的,它运行正常,只是避免了

if __name__ == '__main__':

部分并实例化该类

ex = Example()

enter image description here