gpt4 book ai didi

python - Tkinter 新窗口无法正确关闭

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:51 45 4
gpt4 key购买 nike

我希望我的 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)

两者都做同样的事情。

如何修复它?

最佳答案

在 Tkinter 应用程序中可能只有一个 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()

关于python - Tkinter 新窗口无法正确关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226126/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com