Pages: 1
- Sujet précédent - QGIS 2.8 & plugin python : appeler une méthode sur un click bouton - Sujet suivant
#1 Tue 04 August 2015 19:50
- geogeo
- Juste Inscrit !
- Date d'inscription: 4 Aug 2015
- Messages: 4
QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
Bonjour,
Je débute dans le développement d'une extension Qgis et je ne parviens pas à exécuter une méthode à partir d'un bouton créé dans qdesigner.
J'ai créé la fonction select_name dans mon fichier nomplugin.py, ainsi qu'un bouton QpushButton dans ma boite de dialogue dlg.
Code:
def select_name(self): filename = "abc" print (filename) def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result:
J'ai lu pas mal de doc sur internet mais je ne parviens pas à connecter mon bouton (nom:pushButton) à ma méthode. J'ai essayé de placer les 2 codes suivants à la fin de la méthode __init__ mais ça n'a pas fonctionné.
Code:
self.dlg.pushButton.clicked.connect(self.select_name)
ou
Code:
self.connect(self.ui.pushButton,SIGNAL("clicked()"),self.select_name)
Qgis ne parvient pas a charger le plugin. Cependant, il y fonctionne quand il y a pas cette ligne.
Par avance merci,
Cordialement.
Dernière modification par geogeo (Tue 04 August 2015 20:33)
Hors ligne
#2 Wed 05 August 2015 10:15
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3941
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
Bonjour
Code:
self.connect(self.ui.pushButton,SIGNAL("clicked()"),self.select_name)Qgis ne parvient pas a charger le plugin. Cependant, il y fonctionne quand il y a pas cette ligne.
C'est parce que vous faites appel à self.ui (que votre plugin ne connait pas) au lieu de self.dlg. A l'usage, préférez la première forme d'écriture pour la connexion du bouton à cette seconde. La première écriture est plus pythonesque, plus facile à écrire car moins sujette à l'erreur de frappe et est destinée à remplacer celle-ci.
Pour ce qui est du clic:
- il me semble que print avec parenthèses est une écriture python 3 et QGIS est pour l'instant en Python 2 donc ce serait plutôt print filename
- mais la méthode print renvoie l'info sur une sortie (généralement la fenêtre d'exécution du code - je ne m'attarderai pas dessus au risque de dire des bêtises - voir les notions de stdin/stdout). Et là vous n'avez pas l'interface d'écriture, même si on peut forcer l'affichage à l'écran. Perso, dans QGIS, j'utilise soit une QMessageBox ou une messageBar.
Essayez donc avec ce code
Code:
def select_name(self): filename = "abc" self.iface.messageBar()pushMessage ('MonPlugin:', filename, level=QgsMessageBar.INFO)
Dernière modification par SANTANNA (Wed 05 August 2015 10:19)
En ligne
#3 Wed 05 August 2015 13:58
- geogeo
- Juste Inscrit !
- Date d'inscription: 4 Aug 2015
- Messages: 4
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
Merci Santana pour ta réponse,
Tu me confirmes donc que cette ligne devrait fonctionner placé à la fin de la méthode __init__?
Code:
self.dlg.pushButton.clicked.connect(self.select_name)
J'ai toujours le même message d'erreur lorsque je l'ajoute :
Code:
Impossible de charger l'extension deuxieme provoque une erreur lors de l'appel de sa méthode classFactory() Traceback (most recent call last): File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 219, in startPlugin plugins[packageName] = package.classFactory(iface) File "C:/Users/renard/.qgis2/python/plugins\deuxieme\__init__.py", line 34, in classFactory from .deuxie import deuxieme File "C:/PROGRA~1/QGISWI~1/apps/qgis/./python\qgis\utils.py", line 478, in _import mod = _builtin_import(name, globals, locals, fromlist, level) File "C:/Users/renard/.qgis2/python/plugins\deuxieme\deuxie.py", line 71 self.dlg.pushButton.clicked.connect(self.select_name) ^ IndentationError: unexpected indent Version de Python : 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] Version de QGIS : 2.8.1-Wien Wien, exported Chemin vers Python : ['C:/Users/renard/.qgis2/python/plugins\\processing', 'C:/PROGRA~1/QGISWI~1/apps/qgis/./python', u'C:/Users/renard/.qgis2/python', u'C:/Users/renard/.qgis2/python/plugins', 'C:/PROGRA~1/QGISWI~1/apps/qgis/./python/plugins', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\matplotlib-1.3.1-py2.7-win-amd64.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\nose-1.3.3-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\tornado-4.0.1-py2.7-win-amd64.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\backports.ssl_match_hostname-3.4.0.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\certifi-14.05.14-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\bin\\python27.zip', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\DLLs', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\plat-win', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\lib-tk', 'C:\\PROGRA~1\\QGISWI~1\\bin', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\PIL', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\jinja2-2.7.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\markupsafe-0.23-py2.7-win-amd64.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\pytz-2012j-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Pythonwin', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\Shapely-1.2.18-py2.7-win-amd64.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\six-1.3.0-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\wx-2.8-msw-unicode', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\xlrd-0.9.2-py2.7.egg', 'C:\\PROGRA~1\\QGISWI~1\\apps\\Python27\\lib\\site-packages\\xlwt-0.7.5-py2.7.egg', u'C:/Users/renard/.qgis2//python', 'C:\\PROGRA~1\\QGISWI~1\\apps\\qgis\\python\\plugins\\fTools\\tools']
Le problème viendrait d'ailleurs? Pour créer mon pushbutton, j'utilise qdesigner de qt4 + python 2.7 + qgis 2.8.1.
Code:
a méthode print renvoie l'info sur une sortie (généralement la fenêtre d'exécution du code - je ne m'attarderai pas dessus au risque de dire des bêtises - voir les notions de stdin/stdout). Et là vous n'avez pas l'interface d'écriture, même si on peut forcer l'affichage à l'écran. Perso, dans QGIS, j'utilise soit une QMessageBox ou une messageBar. Essayez donc avec ce code
Merci du conseil, il me sera très pratique pour la suite.
Cette extrait de run renvoi abc dans la console python de qgis aprés le click sur ok.
Code:
def run(self): """Run method that performs all the real work""" # show the dialog self.dlg.show() # Run the dialog event loop result = self.dlg.exec_() # See if OK was pressed if result: print "abc"
Merci
Hors ligne
#4 Wed 05 August 2015 14:34
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3941
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
L'erreur que tu as est une erreur d'indentation. Vérifie donc qu'il y a bien cohérence entre le nombre d'espaces en début de ligne avec la ligne du dessus.
En ligne
#5 Wed 05 August 2015 15:23
- geogeo
- Juste Inscrit !
- Date d'inscription: 4 Aug 2015
- Messages: 4
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
Merci pour ton aide, j'ai pu corriger mon problème.
Une fois l'indentation corrigée (je débute aussi sur python, j'alignais le tout avec des tabulations), j'ai pu corriger mon code et tout fonctionne. Aussi j'avais mal placé la méthode ci-dessous. Je l'ai finalement mise avant self.dlg.pushButton.clicked.connect(self.lenom)
Code:
def select_name(self): filename = "abc" print (filename)
Dernière modification par geogeo (Wed 05 August 2015 15:28)
Hors ligne
#6 Wed 05 August 2015 15:42
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3941
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
je débute aussi sur python, j'alignais le tout avec des tabulations
Ca n'est pas problématique en soi. Le tout est d'être consistant et cohérent, de ne pas mixer les deux types d'indentation : si tu pars sur des tabulations, faut les conserver jusqu'au bout.
En ligne
#7 Wed 05 August 2015 16:57
- geogeo
- Juste Inscrit !
- Date d'inscription: 4 Aug 2015
- Messages: 4
Re: QGIS 2.8 & plugin python : appeler une méthode sur un click bouton
ok, merci pour ces précieux conseils. Je comprends parfaitement mon erreur maintenant.
J'alignais ma ligne avec le code fourni par plugin builder, qui lui avait un alignement avec espaces.
Hors ligne
Pages: 1
- Sujet précédent - QGIS 2.8 & plugin python : appeler une méthode sur un click bouton - Sujet suivant