繁体   English   中英

一定时间后自动刷新Python脚本

[英]Automatically refreshing a Python script after a certain time

我有一个脚本,它从网站上提取火车的出发时间,并将该时间与datetime.now之间的差值保存在一个名为resp的变量中。 响应包含到下一趟火车出发的时间。

然后,它使用Tkinter创建一个新窗口:

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text=resp)
        label.grid(row=1, column=1)

        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(1, weight=1)

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).grid(sticky="nsew")
    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    root.geometry('1920x1080')

    root.mainloop()

并在该窗口中显示resp。

我的问题是出发时间(resp)应该始终是最新的,这意味着它必须每秒刷新一次resp(这意味着它必须运行该问题中未包含的代码)。

在一段时间内将整个脚本包括为True:不起作用,并且可能不是有效的方式。

有办法吗?

我的代码: https//drive.google.com/open?id = 1romGOeUqKa2B-fKQyily6DXDqZTY9xMf

您需要使用多线程。 一个单独的线程可以每秒刷新一次resp ,而您的主线程则处理显示resp

Tkinter的提供了一个名为方法after ,让您安排工作,以在将来运行。 如果要执行的工作可以在几百毫秒内执行,则可以使用它来代替诸如多线程或多处理之类的更复杂的东西。

小部件具有名为configure的方法,该方法允许您在创建小部件后更改其属性。 您可以使用此方法来更改窗口小部件中显示的数据。

例如,假设您有一个名为get_resp的函数。 也许它调用了REST服务,也许它读取了一个文件,但这并不重要。 例如,如果要调用此函数并每10秒更新一次显示,则可以这样进行:

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent)
        self.label = tk.Label(self, text=resp)
        ...
    def refresh_display(self):
        # get the new value
        resp = self.get_resp()

        # update the display with the new value
        self.label.configure(text=resp)

        # have this function be called again in 10 seconds
        self.after(10000, self.refresh_display)

如果self.get_resp()花费的时间太长,则另一个选择是创建一个调用self.get_resp()的线程,然后使用新值设置一个变量(或将其推送到线程安全的队列中)。 然后,您可以修改refresh_display以使用存储在变量中或队列中的任何内容更新变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM