我希望我的GUI有一个新窗口'选项与第一个选项相同。
问题是它还有一个退出(退出)按钮,它不会按预期工作 - 每当我打开新窗口然后按下按钮,在第一次点击时没有任何反应,在第二次它会关闭两个窗口(如果有3个窗口打开,那么它会在第三次点击时关闭所有内容,等等。)
这是相关代码:
from Tkinter import *
from ttk import *
class Application(Tk):
def __init__(self):
self.root = Tk()
self.root.geometry("250x150")
self.app = Frame(self.root)
self.app.grid()
self.create_menu()
self.create_widgets()
self.root.mainloop()
def create_menu(self):
menu = Menu(self.root)
self.root.config(menu=menu)
sub_menu = Menu(menu)
menu.add_cascade(label="File", menu=sub_menu)
sub_menu.add_command(label="New", command=self.__init__)
sub_menu.add_command(label="Run", command=self.enter)
sub_menu.add_separator()
sub_menu.add_command(label="Exit", command=self.app.quit)
我也试图改变:
sub_menu.add_command(label="New", command=self.__init__)
为:
sub_menu.add_command(label="New", command=self.new window)
其中:
def new_window(self):
class App(Application):
Application.__init__(self)
两者都做同样的事情。
我该如何解决?
答案 0 :(得分:1)
在Tkinter-Application中,可能只有一个Tk对象。如果垃圾收集器销毁或销毁了该对象,则将禁用Tkinter。而是将Toplevel用于其他窗口。
请改为尝试:
from Tkinter import *
from ttk import *
class Application(object):
def __init__(self, master):
self.root = master
self.root.geometry("250x150")
self.app = Frame(self.root)
self.app.grid()
self.create_menu()
self.create_widgets()
def create_menu(self):
menu = Menu(self.root)
self.root.config(menu=menu)
sub_menu = Menu(menu)
menu.add_cascade(label="File", menu=sub_menu)
sub_menu.add_command(label="New", command=self.new)
sub_menu.add_command(label="Run", command=self.enter)
sub_menu.add_separator()
sub_menu.add_command(label="Exit", command=self.quit)
def new(self):
window = Toplevel(tk)
return Application(window)
def quit(self):
tk.destroy()
tk = Tk()
Application(tk)
tk.mainloop()