Bonjour,
Je suis sur un petit projet de gestion et de consultation où j'utilise plusieurs QDialog pour afficher les différents modules de l'application.
Cependant, il y a deux modules seulement, que je souhaite que seul un administrateur peut y accéder via un nom utilisateur et mot de passe : Configuration et Importation
Voici les trois QDialog avec les scripts :
La QDialog1
La QDialog 2
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 class Fenetre(QMainWindow): def __init__(self, parent=None): super(Fenetre, self).__init__(parent) self.ui = Ui_Fenetre_c2trl_v2() self.ui.setupUi(self) # -----------------------Bouttons outils-------------------------------------------------------------- self.ui.tb_tableau_bord.clicked.connect(self.afficher_tb) self.ui.tb_evolution_ventes.clicked.connect(self.afficher_evol) self.ui.tb_Analyses.clicked.connect(self.afficher_analyses) self.ui.tb_liste_clients.clicked.connect(self.afficher_clients) self.ui.tb_importation.clicked.connect(self.afficher_imporations) # ---------------------------------------------------------------------------------------------------- def afficher_tb(self): self.Dialog_tb = Dialogtb() self.Dialog_tb.show() self.Dialog_tb.exec_() # ---------------------------------------------------------------------------------------------------- def afficher_evol(self): self.Dialog_evol = Dialogevol() self.Dialog_evol.show() self.Dialog_evol.exec_() # ---------------------------------------------------------------------------------------------------- def afficher_analyses(self): self.Dialog_analyses = Dialoganalyses() self.Dialog_analyses.show() self.Dialog_analyses.exec_() # ---------------------------------------------------------------------------------------------------- def afficher_clients(self): self.Dialog_clients = Dialogclients() self.Dialog_clients.show() self.Dialog_clients.exec_() # ---------------------------------------------------------------------------------------------------- def afficher_imporations(self): self.Dialog_imporation = Dialogimporation() self.Dialog_imporation.show() self.Dialog_imporation.exec_() # ---------------------------------------------------------------------------------------------------- def sortir(self): reponse = QtWidgets.QMessageBox.question(self, "Vous voulez fermer l\'application ?", buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel, defaultButton=QtWidgets.QMessageBox.NoButton) if reponse == QtWidgets.QMessageBox.Yes: self.close() # ------------------------------------------------------------------------------------------------------ if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) QtCore.qInstallMessageHandler(messagederreur) fenetre = Fenetre() fenetre.show() sys.exit(app.exec_())
Et la QDialog 3 :
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 import mysql.connector from PyQt5 import Qt from PyQt5 import QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QDialog, QButtonGroup) from PyQt5.QtWidgets import (QMessageBox, QFileDialog) import reading_config_file as param from UI.import_ui import Ui_Dialog_importation from autorisation import Dialogautorisation def autorise(self): self.login_dialog = Dialogautorisation() self.login_dialog.show() self.login_dialog.exec_() # Afficher la boîte de dialogue et attendre la réponse. if self.login_dialog.login_successful: print("L'utilisateur s'est connecté avec succès.") else: print("L'utilisateur a annulé la connexion.") self.close() self.reject() class Dialogimporation(QDialog): def __init__(self): super().__init__() autorise(self) # lancer la boite de dialogue si accès autorisé la Dialogimportation s'ouvre sinon vers la sortie self.login_dialog = None self.ui = Ui_Dialog_importation() self.ui.setupUi(self) self.login_dialog = None .....
Tout le processus marche très bien si je clique sur le bouton importation la Qdialog autorisation s'affiche et quand je saisie user_name et password ça fonctionne et la QDialog importation s'affiche le plus normal du monde
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57 class Dialogautorisation(QDialog): def __init__(self): super().__init__() self.ui = Ui_Dialog_admin() self.ui.setupUi(self) self.ui.toolButton_valid.clicked.connect(self.accepter) self.ui.toolButton_cancel.clicked.connect(self.annuler) self.cnx = None self.cur = None self.login_successful = False def accepter(self): username = self.ui.lineEdit_user_name.text() userpassword = self.ui.lineEdit_password.text() # Vérifie si les champs sont vides if not username or not userpassword: QMessageBox.warning(self, 'Erreur', 'Veuillez remplir tous les champs.') return self.cnx = mysql.connector.connect(host=param.host, database=param.database, user=param.user, password=param.password, port=param.port) self.cur = self.cnx.cursor() self.cur.execute('SELECT * ' 'FROM users ' 'WHERE user_name = "' + username + '" AND password = "' + userpassword + '" ') if self.cur.fetchone(): self.login_successful = True self.accept() else: self.login_successful = False QMessageBox.warning(self, 'Échec', 'Nom utilisateur ou mot de passe erroné !!!') self.cur.close() self.cnx.close() self.reject() def annuler(self): result = QMessageBox.question(self, 'Confirmation', 'Voulez-vous vraiment annuler ?', QMessageBox.Yes | QMessageBox.No) if result == QMessageBox.Yes: if self.cnx is not None: self.cnx.close() self.reject()
Le problème que j'ai remarqué c'est dans je clique sur le bouton annuler pour sortir complètement de la QDialog autorisation sa ne sort pas
et le pire quand je ferme manuellement la QDialog autorisation il m'affiche la QDiaog importation !!!
Est ce que j'ai oublié quelque chose ? ou bien j'ai mal écrit mon code.
Partager