私はいくつかの基本的な計算を行うためにtkinterでGUIを作っています。私の問題は、私はいくつかのダイアログを閉じることができないということです。私はそれらを閉じて、ユーザーの選択を取ることによって視覚化を変更したいと思います。私のコードは、ウィンドウを閉じるまで待たずにメインクラスの終わりまで待っています。私はそれを解決するために助けが必要です。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: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()
これは私が何をしたいの簡体版です。選択データが閉じると、選択されたデータは開いたままです。
外部サイトのコードを共有しないでください。 [MCVE]を読んだら、ここに貼り付けてください。 – Lafexlos
「できない」とは何ですか?なぜあなたはできないのですか?試してみるとどうなりますか? –
OKボタンを押すとデータ選択ダイアログが閉じますが、データ選択ダイアログは開いたままです。 。 self.column_x [self.graph.selection] = self.graph.data [0]; self.column_y [self.graph.selection] = self.graph.data [1]この行は、Choice Dataを手動で閉じてもメインウィンドウ(Plotia)を閉じるまで実行されません。 Select Dataを閉じるとChoiceDataを自動的に閉じて、その2行を実行します。 – samuel