Bonjour, j'aimerai donner un comportement séquentiel à l’appel d'une fenêtre Toplevel mais je n'y arrive pas.

Un résumé du code:
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
 
class _Manager():
    def __init__(self):
        self.window = tkinter.Tk()
        self.initializing_variables_and_widgets() # ajoute les widgets a la fenetres
        self.window.mainloop()
 
    def initializing_variables_and_widgets():
        e = tkinter.Entry(frame_account, textvariable=self.username_var)
        e.bind("<Key>", lambda event: question(self.window))
        e.bind("<Return>", lambda event: question(self.window))
        e.pack()
 
def question(fen_papa=None):
    class  DialogWindow:
        def __init__(self, fen_papa):
            # preparation de la fenetre
            if fen_papa:          # si il y a deja une fenetre ouverte
                self.window = tkinter.Toplevel(fen_papa)                        # on est oblige d'utiliser un toplevel sinon ca plante
                self.window.grab_set()                                                      # on fige la fenetre parente
                self.window.protocol("WM_DELETE_WINDOW", lambda : (self.window.destroy(), self.window.quit())) # il se trouve que ca semble fonctionner comme ca...
            else:                             # dans le cas ou aucune instance tkinter n'existe
                self.window = tkinter.Tk()                                                  # et bien on en cre une tout simplement
            ...
            self.window.mainloop()
    g = DialogWindow(fen_papa)
    return g.resultat
Le problème c'est que l'événement lance plusieurs fenetres! malgrès le 'grab_set' qui limite la casse.

Nom : example_echec.png
Affichages : 1794
Taille : 54,9 Ko

-Si j'enlève l'un des 2 '.bing', ça fonctionne mais je veux pouvoir garder les 2
-Je me dit que c'est possible car si dans 'def question' je met un 'tkinter.messagebox', je n'ai pas le problème!
-J'ai pensé à lancer DialogWindow dans un autre processus avec multiprocessing, et bloquer la fenêtre principal avec un '.join' mais je ne trouve vraiment pas ça élégant
-J'ai essayer de créer une nouvelle Frame plutôt qu'une nouvelle fenêtre mais ce fut un échec aussi.
-J'ai essayer de mettre un décorateur sur 'question'. Ce décorateur ayant pour but de ne pas exécuter la fonction si elle est déjà exécutée par ailleurs, ça marchouille mais je ne trouve vraiment pas ça propre du tout!

Si cet extrai de code ne suffit pas, le code complet testable se trouve la: https://framagit.org/robinechuca/rai...aster/setup.py
Il suffit ensuite de taper "python3 -m raisin configure" pour tout lancer.

Si vous avez une piste ou même une solution, je suis preneur Merci!