如何在tkinter的while循环中更新Label?

时间:2018-09-08 12:18:25

标签: python tkinter python-2.x

我正在尝试在while循环内的tkinter中更新窗口的标签,但文本没有更新。下面是代码。

Selector ('.abyss-error-message').withText('Please enter a valid UID')

3 个答案:

答案 0 :(得分:1)

要动态更新标签文本,可以使用lbl["text"]

我不能完全遵循您的代码(因为我对此还太陌生...),但是我认为您可以使用它并以这种方式重新编写代码。

from Tkinter import *
window=Tk()
text1 = "Waiting for Button Press..."
lbl=Label(window,text=text1)
lbl.pack()

def main():
    while True:
          if condition:'''The condition is GPIO READ statement but for simplicity I have used condition'''
             lbl["text"] = "IN Button Pressed.Loading Camera."

window.after(5000,main)
window.mainloop()

不确定是否需要window.update()

答案 1 :(得分:1)

正如我在评论中说的那样,像您尝试的那样使用while循环会干扰Tkinter自己的mainloop()。重复执行某些操作而不停止Tkinter GUI的主循环通常是通过使用通用after()方法(您似乎已经知道)来完成的。

此外,如果您将textvariable=小部件的text=(而不是Label)选项设置为StringVar,则对Tkinter变量的更改将自动更新Label的外观。这是我发现的有关使用Tkinter Variable Classes的一些文档。

以下示例代码展示了如何通过实施以下建议来实现目标:

from random import randint
from Tkinter import *

MS_DELAY = 500  # Milliseconds between updates.

window = Tk()
text1 = StringVar()

def gpio_read():
    """ Simulate GPIO READ. """
    return randint(0, 3)

def check_condition():
    if gpio_read() == 0:
        text1.set("IN Button Pressed.Loading Camera.")
    else:
        text1.set("Waiting for Button Press...")

    window.after(MS_DELAY, check_condition)  # Schedule next check.

lbl = Label(window, textvariable=text1)  # Link to StringVar's value.
lbl.pack()

window.after(MS_DELAY, check_condition)  # Schedule first check.
window.mainloop()

答案 2 :(得分:0)

您可以执行以下操作:

condition设置为False,并在True中更改为main

5秒钟后,调用change_if_condition方法,检查condition,如果找到True,则更改标签textvariable,并自动更新标签。

from tkinter import *


def change_if_condition():
    if condition:
        text1.set("IN Button Pressed.Loading Camera.")


def main():
    global condition
    condition= True
    window.after(5000, change_if_condition)


window = Tk()

text1 = StringVar()
text1.set("Waiting for Button Press...")

lbl = Label(window, textvariable=text1)   # use textvariable, so the displayed text is changed when the variable changes
lbl.pack()

condition = False

main()

window.mainloop()