tkinter窗口关闭函数后如何执行命令?

时间:2018-08-21 04:06:59

标签: python python-3.x tkinter

我有一个带有按钮的窗口,并且我希望该按钮创建一个带有新按钮的新窗口。新按钮将破坏新窗口,因此代码应继续运行并显示“ 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”)行。非常感谢您提出任何想法。

1 个答案:

答案 0 :(得分:0)

您可以在辅助函数中提取对root2的破坏,该函数还将执行您想要的print('hi')

  • 您可能不需要lambda:在这种情况下,使用命名的函数可能会更好。
  • 您最好还是使用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()