"Имя пользователя скопировано!"не показывается для text.configure (text = "Имя пользователя скопировано!") до text.after (3000, ...) - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу, чтобы " Имя пользователя скопировано! " отображалось только в течение 3 секунд, после этого строка изменится на " Welcome back ".

Но что происходит, когда я нажимаю кнопку, через 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()

enter image description here

1 Ответ

0 голосов
/ 14 ноября 2018

Рассмотрим эту строку:

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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...