For a database GUI application, I am trying to connect two QComboBox and a QGroupBox together. I am managed to connect the two QComboBox together but the code I wrote to connect the second QComboBox to the QGroupBox doesn't work.
With the first combobox, you can select a item in a first list of items. Depending on the item you choose, you get a another list of items, from the database, in the second combobox. What I want to do is to connect the second combobox to the groupbox so that when I choose an element, I get a particular display.
What have I done so far ? The element on the combobox are string. I found a function to get currentText of the combobox in a previous post. The second combobox is called self.liste_immeubles
def passtt(self,item):
print(item)
and I get the combobox "self.liste_immeubles" current text value this way
self.liste_immeubles.activated[str].connect(self.passtt)
The problem I have is that it's only prints value. I am not able to fetch data with it. For example,
caracteristiques =self.create_group(tab, "Caractéristiques") #creation a group called caracteristiques
date_construction = self.create_line("Date de construction",140) #creation of a Label called date_construction, 140 matches the width
date_construction_edit=self.create_line_edit(date_construction, caracteristiques) #creation of a LineEdit called date_construction_edit
date1=self.db.requetes("SELECT date_construction FROM immeuble WHERE id_atelier="+str(self.id_atelier)+" AND adresse='"+self.liste_immeubles.activated[str].connect(self.passtt)+"';") #self.db is the database, requetes allow me to fetch data from self.db
I want data1 to be the text inside date_construction_edit. The issue is when I run the code, the gui app runs but the data is printed at the end, after I close the app. The data is not fetched.
I show you the code :
import os
import sys
import bdd
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication, QWidget, QProxyStyle
from PyQt5 import QtGui, QtCore
from PyQt5.QtCore import QObject, pyqtSignal
def apostrophe(nom):
if "'" in nom:
a=nom.split("'")
a=a[0]+"''"+a[1]
return a
else:
return nom
class TabWidget_(QWidget):
def __init__(self, id_atelier, parent=None):
QWidget.__init__(self)
super(TabWidget_,self).__init__(parent)
self.id_atelier=id_atelier
self.setLayout(QtWidgets.QVBoxLayout())
self.liste_quartiers=QtWidgets.QComboBox()
self.liste_immeubles=QtWidgets.QComboBox()
self.dict_immeubles={}
self.dict={}
self.stackedwidget=QtWidgets.QStackedWidget()
self.Onglets = QtWidgets.QTabWidget(self)
self.Onglets.setFocusPolicy(QtCore.Qt.TabFocus)
self.Onglets.setMovable(False)
self.layout().addWidget(self.Onglets)
self.db=bdd.Database()
self.Tab_Synthese()
self.adresse=""
self.nouvliste=[]
self.Tab_Immeuble()
#self.Tab_Chantiers()
#self.Tab_DEP()
#self.Tab_Phototheque()
def create_group(self,nom_tab, nom_groupe):
group=QtWidgets.QGroupBox(nom_tab)
group.setTitle(nom_groupe)
nom_tab.layout().addWidget(group)
group.setLayout(QtWidgets.QFormLayout())
return group
def create_line(self,nom_line, width=None):
line = QtWidgets.QLabel()
line.setText(nom_line)
line.setFixedWidth(width)
return line
def create_line_edit(self,nom_line,nom_groupe, width=250):
line_edit=QtWidgets.QLineEdit(nom_groupe)
line_edit.setFixedWidth(width)
line_edit.setReadOnly(True)
nom_groupe.layout().addRow(nom_line, line_edit)
return line_edit
def Tab_Synthese(self):
scrollArea = QtWidgets.QScrollArea() #pour faire défiler la page
widget = QWidget() #ce widget contient tab. il est contenu dans scrollArea
widget.setLayout(QtWidgets.QHBoxLayout())
tab=QWidget(widget)#ce widget contient les groupes
tab.setMaximumWidth(650)
widget.layout().addWidget(tab, QtCore.Qt.AlignCenter)
tab.setLayout(QtWidgets.QVBoxLayout())
#Groupe COORDONNEES
coordonnees = self.create_group(tab, "Coordonnées")
#Eléments du groupe Coordonnées
adresse=self.create_line("Adresse",140)
adresse_edit= self.create_line_edit(adresse, coordonnees)
adresse_edit.setText(self.db.requetes("SELECT adresse FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0])
ville=self.create_line("Ville",140)
ville_edit= self.create_line_edit("Ville", coordonnees)
ville_edit.setText(self.db.requetes("SELECT ville FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0])
code_postal = self.create_line("Code Postal", 80)
code_postal_edit=self.create_line_edit(code_postal, coordonnees, 90)
code_postal_edit.setText(str(self.db.requetes("SELECT code_postal FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0]))
téléphone = self.create_line("Téléphone",140)
téléphone_edit=self.create_line_edit(téléphone, coordonnees, 120)
téléphone_edit.setText(self.db.requetes("SELECT tel FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0])
#Groupe EQUIPE
equipe =self.create_group(tab, "Equipe")
#Eléments du groupe Equipe
anim_tech = self.create_line("Animateur technique",140)
anim_tech_edit= QtWidgets.QTreeWidget(equipe)
anim_tech_edit.setHeaderLabels(["Nom et prénom"])
nom_at=self.db.requetes("SELECT nom, prénom FROM Animateur_technique WHERE id_at IN (SELECT id_at from Jonction_Atelier_AT WHERE id_atelier="+str(self.id_atelier)+");")
#child_elm=self.db.requetes("SELECT * from Jonction_Atelier_AT ;")
#child_elm=self.db.requetes("SELECT * FROM Animateur_technique;")
#print(child_elm)
for i in nom_at:
if i[0]!=None:
elm=QtWidgets.QTreeWidgetItem([i[0]+' '+i[1]])
child=self.db.requetes("SELECT présence FROM Jonction_Atelier_AT WHERE id_at IN (SELECT id_at FROM Animateur_technique WHERE nom='"+str(i[0])+"'AND prénom='"+str(i[1])+"') AND id_atelier="+str(self.id_atelier)+";")[0][0]
elm.addChild(QtWidgets.QTreeWidgetItem(["présence : "+ child])) #il serait bien d'avoir les jours de présence
anim_tech_edit.addTopLevelItem(elm)
equipe.layout().addRow(anim_tech, anim_tech_edit)
anim_tech_edit.setFixedWidth(250)
anim_tech_edit.setFixedHeight(60)
anim_hab = self.create_line("Animateur habitat", 140)
anim_hab_edit=self.create_line_edit(anim_hab, equipe)
anim_hab_edit.setText(" ".join(self.db.requetes("SELECT nom, prénom from Animateur_habitat WHERE id_ah IN (SELECT id_ah from Atelier WHERE id_atelier="+str(self.id_atelier)+");")[0]))
#Groupe PATRIMOINE
patrimoine = self.create_group(tab, "Patrimoine")
#Eléments du groupe Patrimoine
nb_immeubles = self.create_line("Nombre d'immeubles", 140)
nb_immeubles_edit=self.create_line_edit(nb_immeubles, patrimoine)
nb_immeubles_edit.setText(str(self.db.requetes("SELECT nb_immeubles FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0]))
nb_logements = self.create_line("Nombre de logements", 140)
nb_logements_edit=self.create_line_edit(nb_logements, patrimoine)
nb_logements_edit.setText(str(self.db.requetes("SELECT nb_logements FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0]))
#Groupe BAIL
bail = self.create_group(tab, "Autres")
#Eléments du groupe Equipe
date = self.create_line("Date d'ouverture", 140)
date_edit= self.create_line_edit(date, bail)
date_edit.setText(self.db.requetes("SELECT date_ouverture FROM Atelier WHERE id_atelier="+str(self.id_atelier)+";")[0][0])
bailleurs_edit= QtWidgets.QTreeWidget()
nom_bail=self.db.requetes("SELECT nom_bailleur FROM Bailleurs_sociaux WHERE id_bailleur IN (SELECT id_bailleur from jonction_bailleurs_contrats WHERE id_atelier="+str(self.id_atelier)+");")
#print(nom_bail)
cpt=1
for i in nom_bail:
elm=QtWidgets.QTreeWidgetItem(i)
child_bail=self.db.requetes("SELECT nom_contrat FROM contrats WHERE id_contrat IN ( SELECT id_contrat from jonction_bailleurs_contrats WHERE id_atelier = "+str(self.id_atelier)+" AND id_bailleur IN (SELECT id_bailleur FROM Bailleurs_sociaux WHERE nom_bailleur ='"+i[0]+"' ) );")
societe_bail=self.db.requetes("SELECT société FROM jonction_bailleurs_contrats WHERE id_atelier = "+str(self.id_atelier)+" AND id_bailleur IN (SELECT id_bailleur FROM Bailleurs_sociaux WHERE nom_bailleur ='"+i[0]+"' );")
#print(societe_bail)
if cpt==1:
c_item=QtWidgets.QTreeWidgetItem(["Contrats"])
cpt=cpt+1
for child, societe in zip(child_bail,societe_bail):
#print(child)
c_item.addChild(QtWidgets.QTreeWidgetItem(["", child[0], societe[0]]))
elm.addChild(c_item)
bailleurs_edit.addTopLevelItem(elm)
bailleurs_edit.setFixedWidth(390)
bailleurs_edit.setHeaderLabels(["Bailleurs", "Contrats", "Société"])
liste_id=self.db.requetes("SELECT DISTINCT id_atelier from jonction_bailleurs_contrats;")
#print(liste_id)
if [self.id_atelier] in liste_id:
bail.layout().addRow(bailleurs_edit)
#Groupe OBSERVATIONS -> ajouter tab_observations
observations = self.create_group(tab, "Observations")
text=QtWidgets.QTextEdit(observations)
text.setMinimumHeight(200)
text.setFixedWidth(390)
observations.layout().addWidget(text)
scrollArea.setWidget(widget)
#scrollArea.setBackgroundRole(QtWidgets.QPalette.Dark)
scrollArea.setWidgetResizable(True)
#scrollArea.setFixedHeight(800)
self.Onglets.addTab(scrollArea, "Synthèse")
def Tab_Immeuble(self):
scrollArea = QtWidgets.QScrollArea()
widget = QWidget()
widget.setLayout(QtWidgets.QHBoxLayout())
tab=QWidget(widget)
tab.setMaximumWidth(700)
tab.setLayout(QtWidgets.QFormLayout())
widget.layout().addWidget(tab, QtCore.Qt.AlignCenter)
quartiers=self.db.requetes("SELECT DISTINCT nom_quartier from immeuble where id_atelier="+apostrophe(str(self.id_atelier))+";")
#Groupe CHOIX D'IMMEUBLE
groupe_immeuble=self.create_group(tab, "Choix immeuble")
groupe_immeuble.layout().addRow(self.liste_quartiers)
groupe_immeuble.layout().addRow(self.liste_immeubles)
groupe_immeuble.minimumSizeHint()
for nom in quartiers:
self.liste_quartiers.addItems(nom)
liste_adresses=self.db.requetes("SELECT adresse from Immeuble where nom_quartier='"+apostrophe(str(nom[0]))+"';")
self.dict_immeubles[str(nom[0])]=liste_adresses
self.liste_quartiers.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents)
self.liste_quartiers.currentIndexChanged[str].connect(self.on_comboBoxParent_currentIndexChanged)
self.liste_quartiers.setCurrentIndex(1)
#text = str(self.liste_immeubles.currentText())
#self.liste_immeubles.currentIndexChanged.connect(self.selectionchange)
#self.liste_immeubles.activated[str].connect(self.onActivated)
self.adresse=self.liste_immeubles.activated[str].connect(self.passtt)
#GROUPE CARACTERISTIQUES
caracteristiques =self.create_group(tab, "Caractéristiques")
if self.adresse !=None:
date_construction = self.create_line("Date de construction",140)
date_construction_edit=self.create_line_edit(date_construction, caracteristiques)
date1=self.db.requetes("SELECT date_construction FROM immeuble WHERE id_atelier="+str(self.id_atelier)+" AND adresse='"+apostrophe(self.adresse)+"';")
if date1!=[]:
date_construction_edit.setText(str(date1[0][0]))
self.liste_immeubles.update()
bailleur = self.create_line("Bailleur social", 140)
bailleur_edit=self.create_line_edit(bailleur, caracteristiques)
bailleur1=self.db.requetes("SELECT nom_bailleur FROM bailleurs_sociaux WHERE id_bailleur in (SELECT id_bailleur from immeuble WHERE id_atelier="+str(self.id_atelier)+" AND adresse='"+apostrophe(self.adresse)+"');")
#print(bailleur1)
if bailleur1!=[]:
bailleur_edit.setText(bailleur1[0][0])
self.liste_immeubles.update()
nb_etages = self.create_line("Nombre d'étages", 140)
nb_etages_edit=self.create_line_edit(nb_etages, caracteristiques, 60 )
nb_logements = self.create_line("Nombre de logements", 140)
nb_logements_edit=self.create_line_edit(nb_logements, caracteristiques, 60)
nbr1=self.db.requetes("SELECT nb_logements from immeuble WHERE id_atelier="+str(self.id_atelier)+" AND adresse='"+apostrophe(self.adresse)+"';")
if nbr1!=[]:
nb_logements_edit.setText(str(nbr1[0][0]))
typologie = self.create_line("Typologie", 140)
typologie_edit=self.create_line_edit(typologie, caracteristiques)
type_chauffage = self.create_line("Type de chauffage", 140)
type_chauffage_edit=self.create_line_edit(type_chauffage, caracteristiques)
emplacement_tableau_electrique = self.create_line("Tableau électrique", 140)
emplacement_tableau_electrique_edit=self.create_line_edit(emplacement_tableau_electrique, caracteristiques)
emplacement_compteur_électrique = self.create_line("Compteur électrique", 140)
emplacement_compteur_électrique_edit=self.create_line_edit(emplacement_compteur_électrique, caracteristiques)
#IF detecteur de fumée, alors on affiche
#emplacement_détecteur_fumée = self.create_line("Détecteur de fumée", 140)
#emplacement_détecteur_fumée_edit=self.create_line_edit(emplacement_détecteur_fumée, caracteristiques)
ascenseur = QtWidgets.QCheckBox("Ascenseur")
interphone = QtWidgets.QCheckBox("Interphone")
chauffage_au_sol=QtWidgets.QCheckBox("Chauffage au sol")
détecteur_de_fumée=QtWidgets.QCheckBox("Détecteur de fumée") #Ne pas oublier de rajouter l'emplacement
prise_de_terre=QtWidgets.QCheckBox("Prise de Terre")
goulotte=QtWidgets.QCheckBox("Goulotte")
caracteristiques.layout().addRow(ascenseur, interphone )
caracteristiques.layout().addRow(chauffage_au_sol,détecteur_de_fumée)
caracteristiques.layout().addRow(prise_de_terre,goulotte)
scrollArea.setWidget(widget)
scrollArea.setWidgetResizable(True)
self.Onglets.addTab(scrollArea, "Immeuble")
def on_comboBoxParent_currentIndexChanged(self, nom):
if nom in self.dict_immeubles:
items = self.dict_immeubles[str(nom)]
self.liste_immeubles.clear()
for item in items:
self.liste_immeubles.addItems(item)
def passtt(self,item):
print(item)
#Chantiers_ARA
def Tab_Chantiers(self):
widget=QWidget() #a enlever si on utilise pas qwidget
chantiers = QtWidgets.QTreeView()
#chantiers.setRootIsDecorated(True)
#chantiers.setAlternatingRowColors(True)
#chantiers.setMinimumHeight(580) #a enlever si on utilise pas qwidget
layout=QtWidgets.QFormLayout() #a enlever si on utilise pas qwidget
layout.addWidget(chantiers) #a enlever si on utilise pas qwidget
widget.setLayout(layout) #a enlever si on utilise pas qwidget
#self.Onglets.addTab(widget, "Chantiers Ara") # SEULEMENT CETTE LIGNE SUFFIT ! a enlever si on utilise pas qwidget
self.Onglets.addTab(chantiers, "Chantiers Ara") #pour L'avoir sur toute la fenêtre
model2 = self.createMailModel_chantiers(self)
chantiers.setModel(model2)
chantiers.header().setStretchLastSection(True);
appart=self.db.requetes("SELECT * from chantiers_ara WHERE id_appartement in (SELECT id_appartement from Appartements WHERE id_atelier="+str(self.id_atelier)+");")
for line in appart:
id_c, date1, date2, date3, types, pièces, état, id_a, nom, immeuble=line
if état:
état=self.db.requetes("SELECT nom_état from etats_travaux WHERE id_état="+str(état)+";")[0][0]
else:
état=None
if immeuble:
immeuble=self.db.requetes("SELECT nom_quartier from immeuble WHERE id_immeuble="+str(immeuble)+";")[0][0]
else:
immeuble=None
self.addMail_chantiers(model2, str(date1), str(date2), str(date3), str(types), str(état) , "appartement", str(nom), str(immeuble))
#self.addMail_chantiers(model2, str(date1), str(date2), str(date3), str(types), str(état) , "appartement", str(nom), "immeuble")
chantiers.header().setStretchLastSection(True);
#chantiers.header()
#chantiers.setSectionResizeMode(True)
def addMail_chantiers(self,model2, date_debut, date_signature, date_fin, type_chantier, etat_chantier, appartement, nom_prenom, immeuble ):
model2.insertRow(0)
model2.setData(model2.index(0, 0), date_debut)
model2.setData(model2.index(0, 1), date_signature)
model2.setData(model2.index(0, 2), date_fin)
model2.setData(model2.index(0, 3), type_chantier)
model2.setData(model2.index(0, 4), etat_chantier)
model2.setData(model2.index(0, 5), appartement)
model2.setData(model2.index(0, 6), nom_prenom)
model2.setData(model2.index(0, 7), immeuble)
def createMailModel_chantiers(self,parent):
model2 = QtGui.QStandardItemModel(0, 8, parent)
model2.setHeaderData(0, QtCore.Qt.Horizontal, "Date première visite")
model2.setHeaderData(1, QtCore.Qt.Horizontal, "Date signature")
model2.setHeaderData(2, QtCore.Qt.Horizontal, "Date fin chantier")
model2.setHeaderData(3, QtCore.Qt.Horizontal, "Type de travaux")
model2.setHeaderData(4, QtCore.Qt.Horizontal, "Etat du chantier")
model2.setHeaderData(5, QtCore.Qt.Horizontal, "Appartement")
model2.setHeaderData(6, QtCore.Qt.Horizontal, "Nom et prénom")
model2.setHeaderData(7, QtCore.Qt.Horizontal, "Immeuble")
return model2
#Dépannages pédagogique
def Tab_DEP(self):
widget=QWidget() #a enlever si on utilise pas qwidget
dep = QtWidgets.QTreeView()
#chantiers.setRootIsDecorated(True)
#chantiers.setAlternatingRowColors(True)
#chantiers.setMinimumHeight(580) #a enlever si on utilise pas qwidget
layout=QtWidgets.QFormLayout() #a enlever si on utilise pas qwidget
layout.addWidget(dep) #a enlever si on utilise pas qwidget
widget.setLayout(layout) #a enlever si on utilise pas qwidget
#self.Onglets.addTab(widget, "Dépannages pédagiques") # SEULEMENT CETTE LIGNE SUFFIT ! a enlever si on utilise pas qwidget
self.Onglets.addTab(dep, "Dépannages pédagiques") #pour L'avoir sur toute la fenêtre
model = self.createMailModel(self)
dep.setModel(model)
dépannages=self.db.requetes("SELECT * from dépannages_pédagogiques WHERE id_appartement in (SELECT id_appartement from Appartements WHERE id_atelier="+str(self.id_atelier)+");")
for line in dépannages:
id_d, date, nom, adresse, technique, participation, autonomie, suite, commentaire, appartement, id_immeuble=line
if technique:
technique=self.db.requetes("SELECT nom_technique from technique WHERE id_technique="+str(technique)+";")[0][0]
else:
technique=None
if participation:
participation=self.db.requetes("SELECT engagement from participation WHERE id_participation="+str(participation)+";")[0][0]
else:
participation=None
if autonomie:
autonomie=self.db.requetes("SELECT capacité from autonomie WHERE id_autonomie="+str(autonomie)+";")[0][0]
else:
autonomie=None
if id_immeuble:
immeuble=self.db.requetes("SELECT nom_immeuble from immeuble WHERE id_immeuble="+str(id_immeuble)+";")[0][0]
else:
immeuble=None
self.addMail(model, str(date), str(nom), str(adresse), str(technique), str(participation) , str(autonomie), str(suite), str(commentaire),"appartement", str(immeuble))
dep.header().setStretchLastSection(True);
def addMail(self,model, date, nom_prenom, adresse, technique, participation, autonomie, suite, appartement, immeuble, commentaires ):
model.insertRow(0)
model.setData(model.index(0, 0), date)
model.setData(model.index(0, 1), nom_prenom)
model.setData(model.index(0, 2), adresse)
model.setData(model.index(0, 3), technique)
model.setData(model.index(0, 4), participation)
model.setData(model.index(0, 5), autonomie)
model.setData(model.index(0, 6), suite)
model.setData(model.index(0, 7), appartement)
model.setData(model.index(0, 8), immeuble)
model.setData(model.index(0, 9), commentaires)
def createMailModel(self,parent):
model = QtGui.QStandardItemModel(0, 10, parent)
model.setHeaderData(0, QtCore.Qt.Horizontal, "Date ")
model.setHeaderData(1, QtCore.Qt.Horizontal, "Nom et prénom")
model.setHeaderData(2, QtCore.Qt.Horizontal, "Adresse")
model.setHeaderData(3, QtCore.Qt.Horizontal, "Technique")
model.setHeaderData(4, QtCore.Qt.Horizontal, "Participation")
model.setHeaderData(5, QtCore.Qt.Horizontal, "Autonome")
model.setHeaderData(6, QtCore.Qt.Horizontal, "Suite")
model.setHeaderData(7, QtCore.Qt.Horizontal, "Appartement")
model.setHeaderData(8, QtCore.Qt.Horizontal, "Immeuble")
model.setHeaderData(9, QtCore.Qt.Horizontal, "Commentaires")
return model
self.liste_quartiers and self.liste_immeubles are the two QComboBox. The functions with the problem is Tab_Immeuble(self). self.adresse is an attribute which contains the fetched data. self.apostrophe is a function which allows to fetched data with apostrophes.
If you have any idea ? Thanks.