Python &引用;用户名已复制&引用;不显示文本。在文本之前配置(文本=“用户名已复制!”)。在(3000,…)之后配置
我希望“用户名已复制!”仅显示3秒钟,之后,字符串将更改为“欢迎回来” 但是现在发生的是,当我点击按钮时,3秒钟后,“欢迎”将立即变为“欢迎回来”,而“用户名复制!”不会显示在中间Python &引用;用户名已复制&引用;不显示文本。在文本之前配置(文本=“用户名已复制!”)。在(3000,…)之后配置,python,user-interface,tkinter,Python,User Interface,Tkinter,我希望“用户名已复制!”仅显示3秒钟,之后,字符串将更改为“欢迎回来” 但是现在发生的是,当我点击按钮时,3秒钟后,“欢迎”将立即变为“欢迎回来”,而“用户名复制!”不会显示在中间 from tkinter import * from urllib import parse from tkinter import Tk window = Tk() window.title("CopyText") window.geometry('295x70+600+210') myFont = ('Ver
from tkinter import *
from urllib import parse
from tkinter import Tk
window = Tk()
window.title("CopyText")
window.geometry('295x70+600+210')
myFont = ('Verdana',11)
#USERNAME ===================
lbl = Label(window, text="Username:")
lbl.grid(column=0, row=0)
string1 = StringVar(value='myusername')
txt = Entry(window, textvariable=string1, font=myFont, width=18)
txt.grid(column=1, row=0)
def clicked():
copy = txt.get()
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append(copy)
# after button was clicked, change "Welcome" to "Username copied!"
welcomeMessage.configure(text="Username copied!")
# then after 3 seconds, change the "Username copied!" to "Welcome back"
welcomeMessage.after(3000, welcomeMessage.configure(text="Welcome back"))
r.update()
btn = Button(window, text="copy", command=clicked, height=2, width=5)
btn.grid(column=2, row=0)
welcomeMessage = Label(window, text="Welcome")
welcomeMessage.grid(column=1, row=7)
window.mainloop()
考虑一下这一行:
welcomeMessage.after(3000, welcomeMessage.configure(text="Welcome back"))
其功能与此相同:
result = welcomeMessage.configure(text="Welcome back")
welcomeMessage.after(3000, result)
由于结果
为无
,因此3秒后不会发生任何事情
可以说,最好的解决方案是创建一个适当的函数,并通过after
方法调用该函数:
def show_welcome():
welcomeMessage.configure(text="Welcome back")
welcomeMessage.after(3000, show_welcome)
您还可以使用lambda
或functools.partial
轻松解决此问题。下面是使用lambda
的方法:
welcomeMessage.after(3000, lambda: welcomeMessage.configure(text="Welcome back"))
以这一行为例:
welcomeMessage.after(3000, welcomeMessage.configure(text="Welcome back"))
其功能与此相同:
result = welcomeMessage.configure(text="Welcome back")
welcomeMessage.after(3000, result)
由于结果
为无
,因此3秒后不会发生任何事情
可以说,最好的解决方案是创建一个适当的函数,并通过after
方法调用该函数:
def show_welcome():
welcomeMessage.configure(text="Welcome back")
welcomeMessage.after(3000, show_welcome)
您还可以使用lambda
或functools.partial
轻松解决此问题。下面是使用lambda
的方法:
welcomeMessage.after(3000, lambda: welcomeMessage.configure(text="Welcome back"))
您现在正在将文本更改为“欢迎回来”,3秒钟后,您将调用返回的.configure()
(可能没有)。您需要将函数传递到.after()
,这通常不是调用函数的结果。您现在正在将文本更改为“欢迎回来”,然后3秒钟后调用返回的任何。configure()
(可能没有)。您需要将函数传递到.after()
,通常不是调用函数的结果。