首页 > 解决方案 > Python Tkinter:如何用一个按钮更改两个字符串变量,中间有延迟?

问题描述

我是 python/tkinter 的新手,我想知道如何按下一个按钮并让两个变量更改文本,但两者之间有 1 秒的延迟。例如,如果我单击一个按钮,text1 将更改为“已更改”,然后一秒钟后,将 text2 更改为“已更改”。谢谢!

import tkinter as tk
from time import sleep

x = tk.Tk()
root = tk.Frame(x)
root.grid()

def change(str1,str2):
    str1.set("Changed")
    sleep(1)
    str2.set("Changed")

str1 = tk.StringVar()
str2 = tk.StringVar()

str1.set("One")
str2.set("Two")

text1 = tk.Label(root,textvariable=str1)
text2 = tk.Label(root,textvariable=str2)
text1.grid(row=1)
text2.grid(row=1,column=1)

button1 = tk.Button(root,text="Click",command=lambda:change(str1,str2))
button1.grid()

x.mainloop()

标签: pythontkinter

解决方案


使用time.sleep会阻塞你的主线程。您可以使用可以在此处after阅读的方法。

import tkinter as tk

x = tk.Tk()
root = tk.Frame(x)
root.grid()

def change(str1,str2):
    str1.set("Changed")
    root.after(1000,lambda: str2.set("Changed"))

str1 = tk.StringVar()
str2 = tk.StringVar()

str1.set("One")
str2.set("Two")

text1 = tk.Label(root,textvariable=str1)
text2 = tk.Label(root,textvariable=str2)
text1.grid(row=1)
text2.grid(row=1,column=1)

button1 = tk.Button(root,text="Click",command=lambda:change(str1,str2))
button1.grid()

x.mainloop()

推荐阅读