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 :

Nom : dialog1.jpg
Affichages : 167
Taille : 61,6 Ko

Nom : dialog2.jpg
Affichages : 152
Taille : 17,6 Ko

Nom : dialog3.jpg
Affichages : 149
Taille : 17,7 Ko

La QDialog1

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_())
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
 
 
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
        .....
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
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()
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
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.