我想要“复制用户名!”若要仅显示3秒,则字符串将更改为“欢迎返回”。
但所发生的是,当我点击按钮,3秒后,“欢迎”将改为“欢迎回来”,立即,“用户名复制!”没有出现在中间。
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()
发布于 2018-11-14 03:27:24
考虑到这一行:
welcomeMessage.after(3000, welcomeMessage.configure(text="Welcome back"))
它在功能上与以下内容相同:
result = welcomeMessage.configure(text="Welcome back")
welcomeMessage.after(3000, result)
由于result
是None
,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"))
https://stackoverflow.com/questions/53292361
复制相似问题