【问题标题】:How to update Tkinter label with sensor data every 2 seconds [duplicate]如何每 2 秒用传感器数据更新 Tkinter 标签 [重复]
【发布时间】:2018-05-24 10:04:03
【问题描述】:

每次“x”更改值时,我都会尝试使用“x”值更新我在 Tkinter 中的标签。几乎就像一个现场柜台。 这是一个简化的循环,因为我正在研究 Pycharm。最终,我想修改此代码,以便使用连接到我的 Raspberry Pi 的温度传感器的值更新标签。 请在这个主题上提供一些帮助,谢谢:)

from Tkinter import *
import tkFont
import time

# Window
root = Tk()
root.geometry("700x600+550+100")

# Font
font = tkFont.Font(family = 'Halvetica', size = 36, weight = 'bold')

x = 0

def do():
    list = [1, 2, 3, 4]
    for x in list:
        temp = Label(root, text=x, fg="black", heigh=2, width=15, font=font)
        temp.pack()
        time.sleep(2)
        #temp["text"] = x


do()

root.mainloop()

我希望程序打印 1,然后将 1 替换为 2,依此类推。我不希望 1,2,3,4 一起出现。

当我执行代码时,它会向我显示数字 1 到 4,但它没有实时更新它,它们彼此低于,这不是我想要的

【问题讨论】:

  • 使用tkinter.after(miliseconds, function_name)每2000ms(2s)执行一次函数
  • 顺便说一句:您不必再次创建 Label 来更改文本 - temp["text"] = "new text" 但您必须记住全局变量中的标签。
  • 示例如何使用after to display current time in label
  • 顺便说一句:它不起作用,因为它阻止了 mainloop() 从系统获取事件、向小部件发送事件、重绘小部件(以及所有循环)。
  • 这个网站上有很多关于定期运行函数、读取传感器以及更新标签或其他小部件的问题。问之前有没有做过调查?

标签: python user-interface tkinter raspberry-pi3 sensors


【解决方案1】:

在您的代码中,1、2、3、4 完全显示,因为您正在创建一个新标签并在每次 for 循环迭代时在 do 的范围内调用它 temp。相反,您应该制作一个标签并更新它的文本,例如:

temp = tkinter.Label(...)

for(...):
    temp['text'] = "Updated String Here"

此外,如果您使用time.sleep,它也会使您的整个 GUI 处于休眠状态,请尝试使用可用于 tkinter 小部件的 after 方法,例如:

root.after(1000, callback_func)

将每隔1000 毫秒调用一次callback_func

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多