PyQT5 QGIS Dialog Взаимодействия - PullRequest
0 голосов
/ 21 января 2019

Справочная информация: Я пытаюсь использовать QT конструктор в качестве формы атрибута QGIS (это нормально и работает), но код для этого не следует ни за какой документацией или примерами, которые я смог найти. Я нашел немного с 2007 года, который, по крайней мере, позволил мне много работать, но я чувствую, что это ужасно неэффективно.

Проблема: Получение доступа к событиям (closeEvent) из диалоговой формы в QGIS.

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 голосов
/ 20 февраля 2019

Да, он работает правильно, вы просто избегаете

if __name__ == '__main__':

раздел и просто создать экземпляр класса

ex = Example()

enter image description here

0 голосов
/ 23 января 2019

Вы не можете использовать PyQt, как если бы вы работали с автономным приложением, посмотрите на это: развивающихся-python-плагин

В вашем коде вы запускаете новое приложение QApplication, где вашим родительским приложением должно быть QGis; см. QgsInterface класс

В документации pyqgis также рекомендуется использовать плагин pluginbuilder , который поможет вам создать шаблон вашего плагина.

Также помните, что PyQt5 поддерживается только с qgis 3+. Для предыдущих версий используйте PyQt4.

...