我有一个带有按钮的窗口,并且我希望该按钮创建一个带有新按钮的新窗口。新按钮将破坏新窗口,因此代码应继续运行并显示“ hi”。
from tkinter import *
root1 = Tk()
def create():
root2 = Tk()
Button(root2,
text="2",
command=lambda: root2.destroy()).grid()
root2.mainloop()
print("hi")
Button(root1,
text="1",
command=lambda: create()).grid()
root1.mainloop()
我发现的是root2被创建并销毁了,但是“ print(” hi“)”行仅在root1关闭后才运行。我希望在单击显示为“ 2”的按钮后立即执行“ print(“ hi”)行。非常感谢您提出任何想法。
答案 0 :(得分:0)
您可以在辅助函数中提取对root2
的破坏,该函数还将执行您想要的print('hi')
。
Toplevel
而不是再次调用Tk()
import tkinter as tk
而不是导入星号也许是这样的:
import tkinter as tk # avoid star imports
def create_root2():
def terminate(): # helper to destroy root2 and print 'hi'
print("hi", flush=True)
root2.destroy()
root2 = tk.Toplevel(root1) # use tk.Toplevel i/o another call to tk.Tk()
tk.Button(root2,
text="-----2-----",
command=terminate).grid() # call terminate w/o lambda (lambda is not useful here)
root1 = tk.Tk()
tk.Button(root1,
text="-----1-----",
command=create_root2).grid() # call create_root2 w/o lambda (lambda is not useful here)
root1.mainloop()