Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;用户名已复制&引用;不显示文本。在文本之前配置(文本=“用户名已复制!”)。在(3000,…)之后配置_Python_User Interface_Tkinter - Fatal编程技术网

Python &引用;用户名已复制&引用;不显示文本。在文本之前配置(文本=“用户名已复制!”)。在(3000,…)之后配置

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

我希望“用户名已复制!”仅显示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()

考虑一下这一行:

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()
,通常不是调用函数的结果。