Python 对于两个tkinter窗口,脚本在一个';s主回路
我有一个脚本,它有两个tkinter.Tk()对象和两个窗口。一个从一开始就隐藏(使用.draw()),每个按钮都有一个隐藏自己并显示另一个的按钮(使用.deiconify())。我在开头显示的一个上使用.mainloop()。一切正常,但当我关闭任一窗口时,mainloop()之后的代码不会运行,脚本也不会结束 我想这是因为有一扇窗户还开着。如果是这样,我如何关闭它?如果另一个窗口关闭,是否可以在关闭窗口的某个地方进行检查 如果没有,我如何修复此问题 我的代码的精髓:Python 对于两个tkinter窗口,脚本在一个';s主回路,python,tkinter,Python,Tkinter,我有一个脚本,它有两个tkinter.Tk()对象和两个窗口。一个从一开始就隐藏(使用.draw()),每个按钮都有一个隐藏自己并显示另一个的按钮(使用.deiconify())。我在开头显示的一个上使用.mainloop()。一切正常,但当我关闭任一窗口时,mainloop()之后的代码不会运行,脚本也不会结束 我想这是因为有一扇窗户还开着。如果是这样,我如何关闭它?如果另一个窗口关闭,是否可以在关闭窗口的某个地方进行检查 如果没有,我如何修复此问题 我的代码的精髓: from tkinter
from tkinter import *
window1 = Tk()
window2 = Tk()
window2.withdraw()
def function1():
window1.withdraw()
window2.deiconify()
def function2():
window2.withdraw()
window1.deiconify()
button1 = Button(master=window1, text='1', command=function1)
button2 = Button(master=window2, text='2', command=function2)
button1.pack()
button2.pack()
window1.mainloop()
根据评论汇编答案:
Toplevel
而不是多个Tk()
s。这是推荐的做法,因为它减少了此类问题,并且在许多情况下是一个更好的选择
几分钟前有人安静地回答。我会通读一遍,10-15分钟后给你回复。使用多个
Tk
实例很少是个好主意。你为什么不在第二个窗口中使用Toplevel
?我对tkinter很陌生,我不知道Toplevel是什么。我会读到的,也许这就是解决办法。顺便问一下,为什么使用多个Tk不是一个好主意?因为您正在创建一个新的Tk()
实例,那么第一个窗口中的所有内容将仅保留在该窗口中,而不能与第二个窗口一起使用
from _tkinter import TclError
def close_both():
for x in (window1,window2):
try:
x.destroy()
except TclError:
pass
for x in (window1,window2):
x.protocol("WM_DELETE_WINDOW", close_both)