【问题标题】:I am trying to create a new window and execute a function after that new window creation in tkinter我正在尝试在 tkinter 中创建新窗口后创建一个新窗口并执行一个函数
【发布时间】:2021-10-09 14:49:14
【问题描述】:

我正在尝试在 tkinter 中创建一个新窗口,然后执行该函数,但该函数首先执行,然后弹出新窗口。

这里是sn-p的代码:

import tkinter as tk
import time

def loop():
   for i in range(5):
      time.sleep(1)
       print(i)

def new():
   new = tk.Toplevel(window)
   new.geometry("450x250")
   new.title('new window')
   tk.Label(new, text="new one").place(x=150, y=40)
   loop()

window = tk.Tk()
window.geometry("450x250")
window.title('main window')

button = tk.Button(window , text='button', width=20,command= new)
button.place(x=180,y=200)
window.mainloop()

从 1 到 9 打印数字,然后弹出新窗口。 即使它需要破坏主窗口,也没关系。 一点帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: python python-3.x user-interface tkinter


    【解决方案1】:

    Tkinter 有两种通用的小部件方法,可以帮助你做你想做的事。一个称为wait_visibility(),它将暂停程序,直到新的Toplevel 可见。第二个称为after(),它允许在以毫秒为单位指定的延迟后调度对函数的调用。如果被调用的函数做同样的事情,它实际上会创建一个循环。

    以下是它们的使用方法:

    import tkinter as tk
    import time
    
    def loop(limit, i):
        if i < limit:
            print(i)
            window.after(1000, loop, limit, i+1)
    
    def new():
        new = tk.Toplevel(window)
        new.geometry("450x250")
        new.title('new window')
        tk.Label(new, text="new one").place(x=150, y=40)
        window.wait_visibility(new)
        loop(5, 0)
    
    window = tk.Tk()
    window.geometry("450x250")
    window.title('main window')
    
    button = tk.Button(window, text='button', width=20, command=new)
    button.place(x=180,y=200)
    window.mainloop()
    

    【讨论】:

    • 需要window.wait_visibility(new) 吗?一旦代码执行回到window.mainloop(),就会显示窗口。
    • @TheLizzard:我想是的。需要延迟(并触发)对loop() 函数的初始调用。
    • 即使您将其删除,也不会对 GUI 造成任何更改。同样在 OP 的代码中,程序首先休眠然后打印 0,所以 window.after(1000, loop, 5, 0) 可以用来替换 window.wait_visibility(new); loop(5, 0)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多