Как обновить текст в виджете Tkinter Label / Canvas, используя для l oop? - PullRequest
0 голосов
/ 05 августа 2020

У меня проблемы с обновлением текста в метке, а также в холсте. Само по себе обновление текста на холсте было утомительным. Не нашел ничего полезного.

Мой проект здесь - https://github.com/MRDGH2821/Words-Per-Minute-/tree/beta

Что мне sh нужно сделать - Показать абзац, слово за словом ( с некоторой задержкой между ними)

О чем я думал при написании кода - Абзац будет в файле. Код прочитает абзац, извлечет первое слово и поместит их в виджет метки. После задержки 1-е слово исчезнет, ​​а 2-е слово появится на дисплее. И так далее.

Что код на самом деле делает - вместо отображения всего слова он показывает 1-ю букву 1-го слова. Я использовал l oop для обновления текста, отображаемого в виджете метки, но он не обновляет / обновляет sh.

Вот фрагмент кода -

root = tk.Tk()
root.attributes("-fullscreen", True)
root.bind("<F11>", lambda event: root.attributes("-fullscreen", not root.attributes("-fullscreen")))
root.bind("<Escape>", lambda event: root.attributes("-fullscreen", False))
root.bind("<F1>", lambda event: os.exit(0))

w = tk.StringVar()

labelFlash = tk.Label(root, bg='Black', width=root.winfo_screenwidth(), height=root.winfo_screenheight(),
                      anchor="center", text="Sample", fg="White", font="Times " + str(cofg.GetFontSize()), textvariable=w)
labelFlash.pack()
for word in words:
    w.set(word)
    labelFlash.config(text=word)

1 Ответ

0 голосов
/ 05 августа 2020
import tkinter as tk
root = tk.Tk()
root.attributes("-fullscreen", True)
root.bind("<F11>", lambda event: root.attributes("-fullscreen", not root.attributes("-fullscreen")))
root.bind("<Escape>", lambda event: root.attributes("-fullscreen", False))
root.bind("<F1>", lambda event: os.exit(0))

w = tk.StringVar()

labelFlash = tk.Label(root, bg='Black', width=root.winfo_screenwidth(), height=root.winfo_screenheight(),
                      anchor="center", text="Sample", fg="White", font="Times " , textvariable=w)
labelFlash.pack()
MSG="Hello World"
str_list=[]
for i in range(len(MSG)):
    str_list.append(MSG[:i+1])
words=str_list


indx=0
def update():
    global indx
    if indx>=len(words):
        indx=0
    w.set(words[indx])
    labelFlash.config(text=words[indx])
    indx+=1
    root.after(500, update)#500 ms


update()
root.mainloop()
...