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:
Mais il y a erreur car QLine Edit ne supporte pas len().... j'ai essayé avec length() et size() mais pas mieux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if valueTaxon.endsWith(';'): valueTaxon = valueTaxon[:len(self.chxTaxon)-1]
Merci par avance pour l'aide que vous pourrez m'apporter!!
GuZzO
Partager