Как изменить текст на ярлыке Tkinter через определенное время? - PullRequest
0 голосов
/ 10 февраля 2019

Я настраиваю приложение с графическим интерфейсом, и у меня возникает проблема с изменением текста на ярлыке Tkinter на таймере time.sleep ().

Я пробовал что-то вроде

label_text = Label(main_window, text="hello world")
time.sleep(3)
label_text = Label(main_window, text="hello world")

(обратите внимание, что у меня настроена система сетки и окно tkinter, я просто не собираюсь показывать весь код внутри этого)

# Currently this is not working how I would like it to, but here is the code
main_window = tkinter.Tk()
label_text = Label(main_window, text="hello world")
time.sleep(3)
label_text = Label(main_window, text="hello")
label_text.grid(column=1, row=1)

main_window.mainloop() 

и это

main_window = tkinter.Tk()
main_window.resizable(False, False)
main_window.geometry("500x900")

text = StringVar()
text.set("hello")
label = Label(main_window, text=text)
label.grid(column=1, row=1)
time.sleep(3)
text.set("anoefn")
main_window.update()

main_window.mainloop()

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Я думаю, это делает то, что вы хотите.Вам нужно использовать tk_obj.after, чтобы получить задержку.В коде в вопросе sleep задерживает вызов mainloop на 3 секунды.

main_window = tk.Tk()
label_text = tk.Label(main_window, text="hello world")

def on_after():
    label_text.configure( text="hello")

label_text.grid(column=1, row=1)
label_text.after(3000, on_after) # after 3000 ms call on_after

main_window.mainloop()

В комментариях говорится, что вы можете использовать StringVar, связанный с меткой.Тогда on_after потребуется изменить StringVar вместо настройки метки.

Редактировать: для полноты версии с StringVar

main_window = tk.Tk()
var=tk.StringVar()
var.set("Hello World")
label_text = tk.Label(main_window, textvariable=var)

def on_after():
    var.set("Hello ") # set the StringVar instead of configuring the label.

label_text.grid(column=1, row=1)
label_text.after(3000, on_after)
main_window.mainloop()
0 голосов
/ 10 февраля 2019

Попробуйте использовать тип данных StringVar ()

mytext = StringVar()
label_text = Label(main_window, text=mytext)
mytext.set("hello")
#after sometime change the text as required
mytext.set("new text")

, надеюсь, это сработает.

...