PyQT5 QGIS对话交互

问题描述 投票:1回答:2

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

python pyqt5 qgis
2个回答
0
投票

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

在您的代码中,您正在即时创建一个新的QApplication,其中您的父应用程序应该是QGis;看到QgsInterface

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

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


0
投票

是的,它工作正常,你只是避免

if __name__ == '__main__':

部分,只是实例化该类

ex = Example()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.