gpt4 book ai didi

python - 如何每60秒刷新一次python tkinter窗口的内容

转载 作者:行者123 更新时间:2023-12-01 01:32:52 24 4
gpt4 key购买 nike

我有一个 python 程序,可以访问数据库以获取需要在屏幕上显示的内容。它的目的是在一个人的订单准备好被提货时显示。我有获取数据并将其显示在窗口上的所有代码。但是,我需要每 60 秒重新查询一次数据库,因为一些订单将被选取并需要从列表中消失,而另一些则需要添加。我只是不知道如何做到这一点,因为看起来一旦调用 app.mainloop() ,就需要人类与窗口的交互才能发生某些事情。任何帮助将不胜感激...抱歉啰嗦!

最佳答案

这是我整理的一个示例,向您展示如何使用 after() 来检查更新跟踪器的秒数的一些基础知识。

如果您有任何疑问,请告诉我。

import tkinter as tk


class Example(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.geometry("600x400")
self.current_ticket_number = 1
self.data = [[97, "Mike"], [98, "Kaite"], [99, "Tom"]]

self.display_frame = tk.Frame(self)
self.display_frame.grid(row=2, column=0, columnspan=3, sticky="nsew")

self.lbl1 = tk.Label(self, text="Next ticket number: {}".format(self.current_ticket_number))
self.lbl1.grid(row=0, column=0)
self.lbl2 = tk.Label(self, text="Customer Name: ".format(self.current_ticket_number))
self.lbl2.grid(row=0, column=1)
self.entry1 = tk.Entry(self)
self.entry1.grid(row=0, column=2)

tk.Button(self, text="Refresh List", command=self.refresh).grid(row=1, column=0, pady=5)
tk.Button(self, text="Submit new ticket", command=self.new_ticket).grid(row=1, column=1, pady=5)

self.timed_refresh()

def new_ticket(self):
x = self.entry1.get().strip()
if x != "":
self.data.append([self.current_ticket_number, x])
#self.refresh() # you could do self.refresh() here if you want to update as soon as you create a ticket
#I left it out though so you can see how after() works below.
if self.current_ticket_number >= 99:
self.current_ticket_number = 1
else:
self.current_ticket_number += 1

def refresh(self):
self.display_frame.destroy()
self.display_frame = tk.Frame(self)
self.display_frame.grid(row=2, column=0, columnspan=3, sticky="nsew")
for ndex, item in enumerate(self.data):
tk.Label(self.display_frame, text=r"Order #{} is ready for {}.".format(item[0], item[1])).grid(row=ndex, column=1)
tk.Button(self.display_frame, text=r"Remove Ticket".format(item[0], item[1]), command=lambda x=ndex: self.remove_ticket(x)).grid(row=ndex, column=0)

def remove_ticket(self, ndex):
self.data.pop(ndex)
self.refresh()

def timed_refresh(self):
#this after statement is set for every 6 seconds
self.after(6000, self.timed_refresh)
self.refresh()

if __name__ == "__main__":
Example().mainloop()

关于python - 如何每60秒刷新一次python tkinter窗口的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52671833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com