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:
Le problème c'est que l'événement lance plusieurs fenetres! malgrès le 'grab_set' qui limite la casse.
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
-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!
Partager