IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Dialogue entre deux fenêtres et formatage de données


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut Dialogue entre deux fenêtres et formatage de données
    Bonjour à vous,

    je développe un formulaire en python et Qt pour interroger une base de données. Tant que je travaillais dans la même fenêtre tout allait bien mais j'ai voulu faire une assistance à l'utilisateur et je rencontre 2 problèmes.



    1- je saisi les premières lettre d'une espèce de fleur dans un champ de saisie (QlineEdit).

    2- je clique sur le bouton toolbox

    3- un tri s'effectue sur la totalité des espèces afin de n'afficher que celles qui correspondent dans un tableau (QListWidget) et je sélectionne les espèces qui m'intéresse.

    4- je clique sur "ok" et la liste d'espèce vient alimenter le champ de saisie en 1, sous la forme: espece1;espece2;espece3;


    Mon 1er problème est que je n'arrive pas à rapatrier la liste sous forme de chaine de caractère dans mon champ de saisie 1. Tout ce que j'arrive à faire c'est afficher cette liste dans un dialogueBox.

    En abregeant un "peu" le code j'ai ça dans mon 1er fichier (digitaleSQL.py):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from qgis.core import *
    from qgis.gui import *
    from PyQt4.QtSql import *
     
    from ui_frmGenerate_sql import Ui_Dialog
     
    import os.path, sys
    import re
    import time
    import digitaleBS
     
     
    class generateSQL( QDialog, Ui_Dialog ):
    	def __init__( self, iface):
    		QDialog.__init__( self )
    		self.iface = iface
    		self.setupUi( self )
     
    		#Definition du signal pour appeler la fenetre
    		QObject.connect(self.toolCompletion, SIGNAL("clicked ()"), self.doCompletionTaxon)
     
    	def doCompletionTaxon(self) :
    		TaxonBS = self.chxTaxon.displayText ()
    		NewvalueTaxon = ""
    		#Je teste que la chaine envoyée n'est pas vide
    		if len(TaxonBS) <> 0 :
    			#je teste qu'il existe au moins une valeur à afficher, si oui j'ouvre le tableau
    			read_bs = open("./python/plugins/Digitale/BS.txt", "r")
    			for line in read_bs:
    				if line[:len(TaxonBS)] == TaxonBS :
    					NewvalueTaxon = line
    			#sinon j'empeche l'ouverture du tableau
    			if len(NewvalueTaxon) == 0 :
    					QMessageBox.warning( self,  "Attention !!", "Aucun taxon ne correspond a votre recherche")
    			else:
    				#ouverture du tableau et passage en paramètre de la chaine à rechercher: TaxonBS 
    				d = digitaleBS.chxTaxonBS( self.iface, TaxonBS )
    				d.exec_()
    			read_bs.close()
    		else :
    			QMessageBox.warning( self,  "Attention !!", "Vous devez saisir au moins la premiere lettre du taxon a rechercher.")


    et j'ai ça dans mon second fichier (digitaleBS.py):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from qgis.core import *
    from qgis.gui import *
    from PyQt4.QtSql import *
     
    from ui_frmTaxonBS import Ui_Dialog
     
    import os.path, sys, re
     
    class chxTaxonBS( QDialog, Ui_Dialog ):
    	def __init__( self, iface, TaxonBS ):
    		QDialog.__init__( self )
    		self.iface = iface
    		self.setupUi( self )
     
    		self.valueTaxon = TaxonBS
     
    		QObject.connect(self.cmdOkCancel, SIGNAL("accepted()"), self.returnTaxonBS)
     
    		NewvalueTaxon = ""
     
    		#Ouverture de la liste des especes		
    		read_bs = open("./python/plugins/Digitale/BS.txt", "r")
    		for line in read_bs:
    			if line[:len(TaxonBS)] == TaxonBS :
    				NewvalueTaxon = line
    				#Ajout des items trouvés dans mon tableau
    				self.chxTaxonBS.addItem(NewvalueTaxon)
    		read_bs.close()
     
     
    	def returnTaxonBS(self) :
    		returnTaxon = ""
    		for item in self.chxTaxonBS.selectedItems ():
    			#Concaténation des items sélectionnes avec le séparateur ";"
    			returnTaxon = returnTaxon + item.text() + ";"
    		#Affichages des items sélectionnés dans une boite de dialogue		
    		QMessageBox.warning( self,  "Autocompletion", returnTaxon)



    Mon second problème est que j'affiche la liste en ajoutant un séparateur ";" or ce séparateur est présent après le dernier item, je voulais donc l'enlever de façon automatisé en raccourcissant la chaine d'un seul caractère:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		if valueTaxon.endsWith(';'):
    			valueTaxon = valueTaxon[:len(self.chxTaxon)-1]
    Mais il y a erreur car QLine Edit ne supporte pas len().... j'ai essayé avec length() et size() mais pas mieux.


    Merci par avance pour l'aide que vous pourrez m'apporter!!

    GuZzO

  2. #2
    Membre chevronné
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Par défaut
    Bonjour,
    Si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    	def doCompletionTaxon(self) :
    		TaxonBS = self.chxTaxon.displayText ()
    		NewvalueTaxon = ""
    		#Je teste que la chaine envoyée n'est pas vide
    		if len(TaxonBS) <> 0 :
    			#je teste qu'il existe au moins une valeur à afficher, si oui j'ouvre le tableau
    			read_bs = open("./python/plugins/Digitale/BS.txt", "r")
    			for line in read_bs:
    				if line[:len(TaxonBS)] == TaxonBS :
    					NewvalueTaxon = line
    			#sinon j'empeche l'ouverture du tableau
    			if len(NewvalueTaxon) == 0 :
    					QMessageBox.warning( self,  "Attention !!", "Aucun taxon ne correspond a votre recherche")
    			else:
    				#ouverture du tableau et passage en paramètre de la chaine à rechercher: TaxonBS 
    				d = digitaleBS.chxTaxonBS( self.iface, TaxonBS )
    				if d.exec_():
                                            returnTaxon=";".join([str(item.text()) for item in d.chxTaxonBS.selectedItems()])
                                            QtGui.QMessageBox.warning( self,  "Autocompletion", returnTaxon)
                                            self.chxTaxon.setText(returnTaxon)
    			read_bs.close()
    		else :
    			QMessageBox.warning( self,  "Attention !!", "Vous devez saisir au moins la premiere lettre du taxon a rechercher.")

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Par défaut
    merci beaucoup!!

    j'ai l'impression qu'il reste des sauts de ligne mais je devrais pouvoir m'en débarrasser facilement.

    Guzzo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Échange de données entre deux fenêtres
    Par hbenji dans le forum Débuter
    Réponses: 3
    Dernier message: 08/04/2013, 11h02
  2. partage de données entre deux fenêtres
    Par Kelly Diote dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/04/2011, 06h36
  3. Dialogue entre deux classes de fenêtres
    Par zouari.rami dans le forum Débuter
    Réponses: 2
    Dernier message: 28/08/2010, 08h13
  4. Dialogue trop long entre deux fenêtres
    Par Sve@r dans le forum PyQt
    Réponses: 10
    Dernier message: 12/09/2009, 02h53
  5. échange de données entre deux fenêtre
    Par hodhodeni dans le forum Débuter
    Réponses: 1
    Dernier message: 11/06/2009, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo