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