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 …
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