Обновите Маркировку Tkinter от переменной

Я записал сценарий Python, который делает некоторую задачу генерировать, и затем продолжать изменять некоторый текст, сохраненный как строковая переменная. Это работает, и я могу распечатать строку каждый раз, когда она изменяется.

Я могу заставить Маркировку отображать строку впервые, но она никогда не обновляет.

Вот мой код:

from tkinter import *

outputText = 'Ready'
counter = int(0)

root = Tk()
root.maxsize(400, 400)

var = StringVar()

l = Label(root, textvariable=var, anchor=NW, justify=LEFT, wraplength=398)
l.pack()

var.set(outputText)

while True:
    counter = counter + 1
    outputText = result
    outputText = result
    outputText = result
    if counter == 5:
        break

root.mainloop()

Маркировка покажет Ready, но не обновит для изменения этого на строки, поскольку они сгенерированы позже.

После маленького поиска с помощью Google и просмотра ответов на этом сайте, я думал, что решение могло бы состоять в том, чтобы использовать update_idletasks. Я пытался вставить это после каждого раза, когда переменная была заменена, но она не помогла.

19
задан nbro 11 March 2015 в 18:32
поделиться

1 ответ

Окно отображается только после входа в главный цикл. Таким образом, вы не увидите никаких изменений, которые вы вносите в свой , пока блок True предшествует строке root.mainloop () .


Графические интерфейсы пользователя работают, реагируя на события в основном цикле. Вот пример, в котором StringVar также подключен к виджету Entry. Когда вы изменяете текст в виджете Entry, он автоматически изменяется в Label.

from tkinter import *

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

t = Entry(root, textvariable = var)
t.pack()

root.mainloop() # the window is now displayed

Мне нравится следующая ссылка: http://infohost.nmt.edu/tcc/help/pubs/tkinter/


Вот рабочий пример того, что вы пытались сделать:

from tkinter import *
from time import sleep

root = Tk()
var = StringVar()
var.set('hello')

l = Label(root, textvariable = var)
l.pack()

for i in range(6):
    sleep(1) # Need this to slow the changes down
    var.set('goodbye' if i%2 else 'hello')
    root.update_idletasks()

root .update Войдите в цикл обработки событий, пока все ожидающие события не будут обработаны Tcl .

21
ответ дан 30 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: