Je crée une interface graphique dans tkinter pour faire du calcul de base. Mon problème est que je ne suis pas capable de fermer certaines boîtes de dialogue. Je veux les fermer et changer la visualisation en prenant le choix de l'utilisateur. Mon code n'attend pas la fin de la fenêtre pour le faire, attendez la fin de la classe principale. J'ai besoin d'aide pour le réparer.Fermez les boîtes de dialogue multiples de Python Tkinter
class Plotia(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, *kwargs)
tk.Tk.wm_title(self, "Plotia")
s = ttk.Style()
s.theme_use("clam")
# Configuration of the window ....
#....
#....
#....
## Initial Values ##############################
self.Number_Graph = 1
self.path_file = [None for i in range(self.Number_Graph)] # Number of files
self.columnData = [4 for i in range(self.Number_Graph)] # Number of column of the data
self.column_x = [0 for i in range(self.Number_Graph)]
self.column_y = [0 for i in range(self.Number_Graph)]
def askData(self):
# I don't understand why ChoiceData don't close.
self.graph = ChoiceData(self.Number_Graph, self.columnData)
# Only when the main window close, this two lines executes,
# and change this two variables. I want that this two lines executes when
#Choice Data close
self.column_x[self.graph.selection] = self.graph.data[0]
self.column_y[self.graph.selection] = self.graph.data[1]
# This is is the Dialog I can close correctly
class ChoiceData(tk.Toplevel):
def __init__(self, NumberGraph, NumberData):
super(ChoiceData, self).__init__()
## Initial Values #################################
self.NumberGraph = NumberGraph
self.selection = None
self.numberData = NumberData
self.data = []
########################################################
# Layout Configure
#...
def Select(self):
self.selection = int(self.BoxList.get())-1
selectionData = SelectData(self.numberData[self.selection])
self.data.append(selectionData.xData)
self.data.append(selectionData.yData)
self.destroy()
class SelectData(tk.Toplevel):
def __init__(self, numberData):
super(SelectData, self).__init__()
## Initial Values #################################
self.xData= None
self.yData = None
self.NumberData = numberData
########################################################
# Layout configuration.,,,
def Update(self):
self.xData = int(self.xBox.get())-1
self.yData = int(self.yBox.get())-1
self.destroy()
if __name__ == '__main__':
app = Plotia()
app.geometry("500x500")
app.mainloop()
EDIT: d'importation tkinter *
class Quit:
def __init__(self, root):
root.destroy()
class ChoiceData:
def __init__(self,root):
self.top = Toplevel(root)
self.label = Label(self.top, text="ChoiceData")
self.button = Button(self.top, text="Ok", command=self.stuff)
self.top.protocol("WM_DELETE_WINDOW", lambda: Quit(self.top))
self.label.pack()
self.button.pack()
def stuff(self):
thing = SelectData(self.top)
self.top.destroy()
print("Windows closed")
class SelectData:
def __init__(self,root):
self.top = Toplevel(root)
self.label = Label(self.top, text="SelectData")
self.button = Button(self.top, text="Ok", command=self.closer)
self.top.protocol("WM_DELETE_WINDOW", lambda: Quit(self.top))
self.label.pack()
self.button.pack()
self.top.mainloop()
def closer(self):
self.top.destroy()
root = Tk()
ChoiceData(root)
root.mainloop()
Ceci est une version simpliee de ce que je veux faire. Les données de choix restent ouvertes lorsque vous sélectionnez Fermer les données.
Veuillez ne pas partager de code depuis un site externe. Vous devriez le coller ici après avoir lu [MCVE]. – Lafexlos
Que signifie "incapable de"? Pourquoi ne pouvez-vous pas? Qu'est-ce qui se passe quand vous essayez? –
Lorsque j'appuie sur le bouton Ok, la boîte de dialogue de sélection des données se ferme, mais la boîte de dialogue Choix des données reste ouverte. . self.column_x [self.graph.selection] = self.graph.data [0]; self.column_y [self.graph.selection] = self.graph.data [1] Cette ligne ne s'exécute pas tant que je ne ferme pas la fenêtre principale (Plotia) même si je ferme manuellement les données de choix. Je souhaite fermer ChoiceData automatiquement lorsque je ferme Select Data, puis exécute ces deux lignes. – samuel