Bienvenue! Inscrivez-vous et rejoignez notre communauté :)
  • Login:

Bienvenue sur Forum SIG - Systèmes d'Information Géographique et Géomatique.

Bienvenue sur le forumSIG. S'il s'agit de votre première visite, assurez vous de faire une recherche préalable dans les FAQ SIG. Vous devez vous inscrire avant de pouvoir poster.

Affichage des résultats 1 à 4 sur 4
  1. #1

    Date d'inscription
    juillet 2008
    Messages
    80

    Par défaut Non Résolu : [QGIS 1.x] Python Qgis : QFileDialog

    Bonjour,

    Voici le run d'un plugin que je viens de coder pour Qgis...
    Débutant, je suis assez content : il s'execute correctement quand je clic sur l'icone et mes elements séléctionnés sont bien déplacés...(et c'est un peu grace à vous..

    j'ai une dernière question...je rame encore pour comprendre comment interfacer mon code avec un élément graphique...(j'arrive à créer l'interface avec Qt, mais pas à interagir avec mon code :

    Code:
    def run(self): 
        import shutil, os
        
        dest='/Users/.../.../chemin/vers/repertoire/cible'
        aLayer=self.iface.activeLayer()
        for features in aLayer.selectedFeatures():
        	attributs=features.attributeMap()
        	selection=attributs[0].toString()
        	selectionstr=str(selection)
        	shutil.copy(selectionstr,dest)
    Pour l'instant, ma variable 'dest' est toujours identique, j'aimerai juste pouvoir indiquer à chaque execution du plugin un repertoire cible grace à un bouton et un explorateur de fichier, comme si j'avais un dest = input('selection du repertoire cible : '), je crois qu'à la main cela se code grace à QfileDialog mais je suis largué quand à son utilisation...

    je ne sais pas si je me suis correctement exprimé, mais j'espère avoir réussi à faire passer l'idée générale...en tout cas, grand merci.
    Dernière modification par _léo_ ; 07/10/2012 à 21h42.

  2. #2

    Date d'inscription
    août 2009
    Messages
    99

    Par défaut

    Quelle est ta version de python ?

  3. #3

    Date d'inscription
    mars 2010
    Localisation
    Alsace
    Emploi
    Chargé d'études SIG
    Messages
    43

    Par défaut

    Il faudrait que tu suives le workshop PyQGIS. C'est important de comprendre comment construire un plugin pour qgis de façon correcte.
    Une adresse intéressante : http://softlibre.gloobe.org/qgis/workshop/plugin

    Tu peux aussi regarder dans le répertoire des plugins qgis comment ils sont implémentés.

    Une fois une structure adéquate trouvée, tu peux faire correspondre un slot répondant au signal de clic sur un bouton parcourir :

    Dans initGui(), connection du signal d'un bouton parcourir au slot qui va mettre à jour le texte d'un widget lineEdit:
    Code:
    # browse button
        QObject.connect(self.dlg.ui.btnBrowse, SIGNAL('clicked()'), self.updateLie)
    Plus loin dans ton code définition du slot en question:
    Code:
    def updateLie(self):
        self.dlg.ui.lie.setText(QFileDialog.getExistingDirectory(self.dlg, "Selection du repertoire cible"))
    bonne chance
    Dernière modification par bidounight ; 08/10/2012 à 10h14. Motif: lien invalide

  4. #4

    Date d'inscription
    juillet 2008
    Messages
    80

    Par défaut

    Bonjour,

    Merci pour ta réponse, c'est effectivement le tuto que je suivais...

    bon après avoir passé au crible différents plugins que j'avais et bidouiller, re bidouiller, tenter des trucs, re tenter des trucs, les annuler, encore et encore...je suis arrivé à faire tourner un truc pas mal.

    Pour le suivi au cas ou quelqu'un se poserait la question :

    Pour la structure, je m'en suis sorti avac un fichier testExport.py qui appelle le fichier de dialogue testExportDialog.py, qui stocke les variables utilisateurs comme l'adresse du repertoire cible et l'envoie à un troisième fichier qui contient la routine d'export testExportEngine.py.

    Je vous poste le code des trois fichiers :
    Bon, le code est sûrement très sale et peut surement largement être optimisé, n'empêche qu'il tourne...si vous avez des remarques je suis néanmoins plus que preneur pour progresser...

    Voici mon fichier principal - testExport.py

    Code:
    # Import the PyQt and QGIS libraries
    
    from PyQt4.QtCore import * 
    from PyQt4.QtGui import *
    from qgis.core import *
    # Initialize Qt resources from file resources.py
    import resources
    # Import the code for the dialog
    from testExportDialog import testExportDialog
    from PyQt4.QtGui import QApplication, QMainWindow, QMenu, QMessageBox
    import shutil, os
    class testExport: 
    
      def __init__(self, iface):
        # Save reference to the QGIS interface
        self.iface = iface
    
      def initGui(self):  
        # Create action that will start plugin configuration
        self.action = QAction(QIcon(":/plugins/testExport/icon.png"), \
            "Export4vents", self.iface.mainWindow())
        # connect the action to the run method
        QObject.connect(self.action, SIGNAL("activated()"), self.run) 
    
        # Add toolbar button and menu item
        self.iface.addToolBarIcon(self.action)
        self.iface.addPluginToMenu("&testExportPlugin", self.action)
    
      def unload(self):
        # Remove the plugin menu item and icon
        self.iface.removePluginMenu("&testExportPlugin",self.action)
        self.iface.removeToolBarIcon(self.action)
    
      # run method that performs all the real work
      def run(self): 
        # create and show the dialog 
        dlg = testExportDialog() 
        # show the dialog
        dlg.show()
        result = dlg.exec_() 
        # See if OK was pressed
        if result == 1: 
        	
        	aLayer=self.iface.activeLayer()
        	for features in aLayer.selectedFeatures():
        		attributs=features.attributeMap()
        		selection=attributs[0].toString()
        		selectionstr=str(selection)
        		shutil.copy(selectionstr,dest)
          # do something useful (delete the line containing pass and
          # substitute with your code
    Ensuite le fichier de dialogue - testExportDialog.py :

    Code:
    from PyQt4 import QtCore, QtGui 
    from Ui_testExport import Ui_testExport
    import os, shutil
    
    from PyQt4 import QtCore, QtGui 
    from PyQt4.QtCore import * 
    from PyQt4.QtGui import *
    from qgis.core import *
    from testExportEngine import testExportEngine
    import os.path
    import glob # file glob for iterating dir
    # create the dialog for testExport
    class testExportDialog(QtGui.QDialog):
      def __init__(self): 
        QtGui.QDialog.__init__(self) 
        # Set up the user interface from Designer. 
        self.ui = Ui_testExport ()
        self.ui.setupUi(self)
        self.dir = os.path.realpath(os.path.curdir)
        
    
      @pyqtSlot() #je ne sais pas vraiment à quoi sert cette ligne, mais si je l'enleve mon file browser s'ouvre  à l'infini...
      def on_slctOutputDir_clicked(self): #ouvre le file browser au clic sur le bouton correspondant
        myDirName = QtGui.QFileDialog.getExistingDirectory(self, "Repertoire de destination des images :")
        self.ui.OutputPath.setText(myDirName)
    
      def accept(self):
      	myEngine=testExportEngine()
    	myEngine.dest=str(self.ui.OutputPath.text())
    	myEngine.run()
    Et voici enfin ma routine - testExportEngine.py :

    Code:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import shutil, os, qgis
    from qgis.core import *
    from PyQt4 import QtCore, QtGui 
    from PyQt4.QtCore import * 
    from PyQt4.QtGui import QMessageBox
    class testExportEngine():
    
      def __init__(self):
      	self.dest = None
      def run(self): 
        dest2=str(self.dest)
        aLayer=qgis.utils.iface.activeLayer()
        
        for features in aLayer.selectedFeatures():
       		attributs=features.attributeMap()
       		selection=attributs[0].toString()
       		selectionstr=str(selection)
       		shutil.copy(selectionstr,dest2)
      		#QtGui.QMessageBox.information(None, "Copie réussie", "La copie s'est deroulee avec succes!")
    Comme vous l'aurez surement remarqué, il y a quelques problèmes :
    _la routine de testExportEngine.py est la même que le run dans le fichier principal, j'imagine qu'il y'a redondance mais si je l'enlève du testExport.py, le plugin ne fonctionne plus... :/ Je suppose que le fichier testExportEngine n'est pas nécessaire et que je peux ne l'écrire que dans le run du fichier principal mais toutes mes tentatives se sont soldées par de jolies "Python Error" bien rouges...

    _Le message de "Copie Réussie" est actuellement commenté car j'aimerai qu'il s'affiche une fois tous les fichiers déplacés alors qu'à la place ou il se trouve, il s'affiche pour chaque image déplacée, la suivante étant copiée après avoir cliqué sur "ok" et de nouveau messagebox...et ainsi de suite sur 50 images c'est un peu lourd... Le mettre au même niveau que le "for" empêche mon plugin de tourner.

    Y aurait il un moyen d'écrire un code du style "When job is done, affiche la messagebox"?

    Que pensez vous du code de mon premier plugin ?

    Sinon pour la suite, afin de finaliser mon apprentissage,j'aimerai maintenant :

    _visualiser dans un encart une progressbar et un dialogue du genre 4/54 fichiers déplacés.
    _changer le style (couleur par exemple) des points séléctionnés une fois les images déplacées afin d'être sur de ne pas les selectionner plusieurs fois.
    _maitriser l'affichage d'erreurs par messagebox.warning du style "aucune couche active séléctionnée" et "la couche séléctionnée ne contient aucune séléction"

    Je devrais avoir à peu près fait le tour...
    Dernière modification par _léo_ ; 12/10/2012 à 11h11. Motif: up

 

 

Discussions similaires

  1. [QGIS 1.x] Python : Parcourir une sélection
    Par _léo_ dans le forum Assistance et Programmation
    Réponses: 10
    Dernier message: 28/09/2012, 08h54
  2. [Python] Convertisseur symboles vers QGIS (en python)
    Par Elsane dans le forum Ressources
    Réponses: 1
    Dernier message: 21/12/2011, 12h42
  3. [QGIS 1.x] Utiliser QGis via Python ou C ?
    Par Darts dans le forum Assistance et Programmation
    Réponses: 2
    Dernier message: 27/04/2009, 11h54
  4. [QGIS 0.9.x] Plugin python
    Par eClaerr dans le forum Assistance et Programmation
    Réponses: 8
    Dernier message: 26/03/2008, 21h26
  5. [QGIS 0.9.x] Recherche documentations Python
    Par Oakland dans le forum Assistance et Programmation
    Réponses: 7
    Dernier message: 06/02/2008, 13h44

Les tags pour cette discussion

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •