python - TKinter。每 10 秒刷新一次从 csv 获取的变量
问题描述
晚上好。我有每 10 秒更新一次的 csv 文件。我想在 GUI 中显示它的字符串值,并每 10 秒将其更新为标签(无需单击按钮)。
我使用 尝试了几个选项 root.update_idletasks()
,root.after
但time.sleep(10)
没有得到所需的结果。
我的 csv 文件如下: 2 行 1 列的简单表
我的代码如下所示。
import tkinter as tk
from tkinter import *
import pandas as pd
import time
#'while' loop is used to read from csv file each 10 seconds (however it seems that I use it unproperly)
while 1:
#reading from csv file
df=pd.read_csv('outputs.csv')
#assigning string value to variable 'day'. This string value is udpated each 10 seconds inside the csv file
day=df.at[0, 'Date/Time']
#creating function that updates label each 10 seconds
def set_label():
var = StringVar()
var.set(day)
label = tk.Label(frame, textvariable=var)
label.place(relwidth=1, relheight=1)
root.after(1000, set_label)
root.update_idletasks()
root = tk.Tk()
#creating frame
frame = tk.Frame(root)
frame.place(relwidth=1, relheight=1)
#calling function
set_label()
root.mainloop()
#to read from csv file again in 10 seconds
time.sleep(10)
请让我知道如何在 GUI 中显示来自 csv 的字符串值,并每 10 秒将其更新为标签。
解决方案
root.after
可能是最直接的方法:
from tkinter import *
import pandas as pd
# creating function that updates label each 10 seconds
def set_label(day):
var = StringVar()
var.set(day)
label = Label(frame, textvariable=var)
label.place(relwidth=1, relheight=1)
def run():
# reading from csv file
df=pd.read_csv('outputs.csv')
# assigning string value to variable 'day'. This string value is udpated each 10 seconds inside the csv file
day = df.at[0, 'Date/Time']
# calling function
set_label(day)
root.after(10000, run)
root = Tk()
# creating frame
frame = tk.Frame(root)
frame.place(relwidth=1, relheight=1)
root.after(1000, run)
root.mainloop()
这只是转换。如果我没记错的话,你现在实际上不需要每次都创建一个新标签,所以代码set_label()
看起来更像
def set_label(day):
var = StringVar()
var.set(day)
Tkinter 可能有点挑剔,如果它没有自动更新,您可以使用 调用帧更新frame.update()
,您必须将帧传递给循环运行函数才能执行此操作。
推荐阅读
- c# - 如何停止 kendo UI NumericTextBoxFor 四舍五入十进制数
- java - 将串通量拆分为多个通量
- mobx - Mobx 中的动作装饰器在严格模式下不起作用
- c# - 如何让子类中的 PunRPC 方法工作?
- php - 电子邮件联系表单中的 PHP 开关未发送到正确的地址
- sql - 在 CHARINDEX 中使用多个搜索条件
- javascript - 需要帮助,希望在全日历中显示每天的不同事件
- python - 如何根据 Pandas 中的另一列值计算每个年龄的平均值
- acumatica - 自动将所有客户转换为供应商有什么害处吗?
- javascript - 按顺序将对象推入数组