banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !

10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …

Faire un don 

Retrouver nos membres bienfaiteurs

#1 Tue 14 April 2020 22:34

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

QGIS3/PyQt5 : clic sur un bouton

Bonjour,

Dans QGIS3, j'ai crée un plugin via Plugin Builder. Dans mon interface du plugin, je met un bouton et je voudrais écrire l'action à réaliser quand je clique sur le bouton.
J'ai compilé le fichier .ui pour avoir le fichier .py, et je modifie le fichier .py . Voici le fichier modifié ;

Code:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_DroneDialogBase(object):
    def setupUi(self, DroneDialogBase):
        DroneDialogBase.setObjectName("DroneDialogBase")
        DroneDialogBase.resize(400, 300)
        self.button_box = QtWidgets.QDialogButtonBox(DroneDialogBase)
        self.button_box.setGeometry(QtCore.QRect(30, 240, 341, 32))
        self.button_box.setOrientation(QtCore.Qt.Horizontal)
        self.button_box.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        self.button_box.setObjectName("button_box")
        self.pushButton = QtWidgets.QPushButton(DroneDialogBase)
        self.pushButton.setGeometry(QtCore.QRect(250, 120, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton.clicked.connect(self.buttonClicked)

        self.retranslateUi(DroneDialogBase)
        self.button_box.accepted.connect(DroneDialogBase.accept)
        self.button_box.rejected.connect(DroneDialogBase.reject)
        self.pushButton.clicked.connect(DroneDialogBase.exec)
        QtCore.QMetaObject.connectSlotsByName(DroneDialogBase)

    def retranslateUi(self, DroneDialogBase):
        _translate = QtCore.QCoreApplication.translate
        DroneDialogBase.setWindowTitle(_translate("DroneDialogBase", "Drone"))
        self.pushButton.setText(_translate("DroneDialogBase", "PushButton"))

    def buttonClicked(self):
        self.pushButton.setText(' was pressed')
        print("OK")

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    DroneDialogBase = QtWidgets.QDialog()
    ui = Ui_DroneDialogBase()
    ui.setupUi(DroneDialogBase)
    DroneDialogBase.show()
    sys.exit(app.exec_())

Mais quand je clique sur le bouton, il ne se passe rien.

D'autre part, dans la manière de développer, il faut d'abord bien installer les composants, compiler le .ui en .py, et ensuite écrire les événements sur les composants?
Parce que si on rajoute un composant "après coup", ça réinitialise tout le fichier .py quand on recompile le .ui en .py ...

Désolé si le problème peut paraitre banal, mais c'est mon premier test dans l'écriture d'un plugin QGIS.

Merci,
Nico

Dernière modification par nico-29 (Tue 14 April 2020 22:58)

Hors ligne

 

#2 Wed 15 April 2020 09:21

bidounight
Participant occasionnel
Date d'inscription: 17 Mar 2010
Messages: 27

Re: QGIS3/PyQt5 : clic sur un bouton

Bonjour Nico.
Normalement plugin builder crée un autre fichier python ds le même répertoire qui lui n’est pas régénéré à chaque modification d’interface. Là tu as dû éditer le fichier avec le suffixe « _dialog » qui est en effet écrasé à chaque compilation du fichier d’interface et donc ds lequel il ne faut rien écrire (simplement appeler la classe ds les imports du bon fichier python).
Il faut donc que tu insères ton code dans le bon fichier avec les ajustements nécessaires.
Sinon tu avais bien connecté le slot au clic sur le bouton donc ça aurait pu marcher !
Bon courage

Dernière modification par bidounight (Wed 15 April 2020 09:23)

Hors ligne

 

#3 Wed 15 April 2020 09:42

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

Re: QGIS3/PyQt5 : clic sur un bouton

J'ai un fichier drone.py (nom de mon plugin)
un fichier drone_dialog.py
un fichier drone_dialog_base.py (celui qui est associé au fichier.ui et qui est réinitialisé chaque fois que je compile le .ui avec la commande pyuic5)

J'ai mis mon code dans drone_dialog_base.py, mais c'est pas bon, donc.

>> Il faut donc que tu insères ton code dans le bon fichier avec les ajustements nécessaires.

Quel est ce fichier? quels sont les ajustements ?

Nico

Hors ligne

 

#4 Wed 15 April 2020 09:51

bidounight
Participant occasionnel
Date d'inscription: 17 Mar 2010
Messages: 27

Re: QGIS3/PyQt5 : clic sur un bouton

Alors le bon fichier c’est drone.py tout court. Les ajustements c’est qu’il faut mettre les choses au bon endroit ds le fichier car plugin builder génère pas mal de lignes de codes qu’on est pas obligé de comprendre pour faire tourner. Il faut faire les bons imports, connecter les slots et faire le RUN et show à la fin du fichier. Mais bon comme ça ne fonctionne jamais du premier coup c’est pour ça que je parlais d’ajustements aussi.

Dernière modification par bidounight (Wed 15 April 2020 09:52)

Hors ligne

 

Pied de page des forums

Powered by FluxBB