Python Tkinter命令优先级

问题描述 投票:0回答:1

我在程序中遇到了一个奇怪的问题。

from tkinter import *
import time 


class Window:
    def __init__(self):
        self.root = Tk()
        self.root.title('Test')
        self.root.geometry('400x500')
        self.root.resizable(FALSE, FALSE)
        self.root.configure(bg ='#1A181B')

    def draw_widgets(self):
        Button(self.root, text='Start', font='Verdana 17',command = self.start_bot).grid(row=1, column=1)

    def run(self):
        self.draw_widgets()
        self.root.mainloop()

    def start_bot(self):
        Button(self.root, text='Start', font='Verdana 17', command=self.start_bot).grid(row=2, column=1)
        time.sleep(4)
        print('a')


win = Window()
win.run()
win.draw_widgets()

正如您在按下按钮后所看到的,我想创建另一个按钮,然后等待4秒钟,然后打印'a',但这是另一回事:1)等待4秒钟2)打印'a'3 )正在创建按钮。

请,我该如何解决,我真的需要您的帮助。

python button tkinter
1个回答
1
投票

当您使用time.sleep()时,应用程序将暂停处理,直到该时间段结束为止。这包括更新GUI更改。为了使更改在开始睡眠之前生效,您必须使用update_idletasks()告诉应用程序执行此操作。参见示例:

def start_bot(self):
    Button(self.root, text='Start', font='Verdana 17',
           command=self.start_bot).grid(row=2, column=1)
    self.root.update_idletasks()    # Update GUI changes
    time.sleep(4)
    print('a')

查看after()函数,该函数不会暂停处理,但会在以后安排一些时间。这通常可以代替睡眠使用,是一项很好的功能。

© www.soinside.com 2019 - 2024. All rights reserved.