Спасибо Брайану Оукли за ответ. Я сделал 4 изменения, чтобы он работал на терминале Linux: 1) Я изменил класс с Tk () на Toplevel ();
2) Я помещаю диалог в класс для чистоты; 3) я изменил self.quit () на self.destroy (); & 4) Я изменил mainloop () на wait_window ().
class AddCategory(tk.Toplevel):
def __init__(self, parent):
tk.Toplevel.__init__(self)
self.v = tk.IntVar()
self.parent = parent
tk.Label(self, text="Choose category:").pack()
for key, cat in self.parent.categories.items():
tk.Radiobutton(self, text=cat, variable=self.v, value=key).pack()
tk.Radiobutton(self, text="Other", variable=self.v, value=key+1).pack()
self.e = tk.Entry(self,text="")
self.e.pack()
tk.Button(self, text="Close", command=self.quit).pack()
def quit(self):
self.parent.key = self.v.get()
self.parent.cat = self.e.get()
print(self.v.get())
print(self.e.get())
self.destroy()
Обратите внимание, что parent - это класс, из которого я запускаю диалог "AddCategory". Я вызываю это следующим образом:
class Category():
def __init__(self):
self.cat = self.key = self.desc = []
self.categories = {1:"Coffee",2: "Tesco"}
self.descriptions = {}
def index(...):
# code ... #
dialog = AddCategory(self) # I pass the parent onto the dialog
dialog.wait_window()
print(self.key)
print(self.cat)
Это работает, потому что self.parent внутри AddCategory является мягкой копией parent.