如何根据另一个文件修改的变量自动更新标签?

2024-04-19 12:23:34 发布

您现在位置:Python中文网/ 问答频道 /正文


Tags: python
1条回答
网友
1楼 · 发布于 2024-04-19 12:23:34

根据你提供的文件

'the global variable str_mod in the global_variable.py file that gets modified by using data from Stats_Tab.py'

str_mod被修改的假设是错误的。你知道吗


全局变量并不像这个问题所暗示的那样全局。它们不是共享的,或者可以在多个python脚本之间无缝地访问。你知道吗


如果一个脚本有一个全局变量,这意味着该变量可以在该脚本中的任何地方访问,并且该脚本本身,除非该脚本被另一个脚本import访问。即使在使用所需的'global'变量的脚本被import编辑之后,对该变量所做的更改现在也用于导入脚本,并且仅用于导入脚本。你知道吗

如果一个文件中的数据需要由多个python脚本访问,那么它必须由每个想要访问它的脚本读取。你知道吗

如果脚本需要文件中的数据,则脚本必须读取reload(如果是第一次,则为import),每次脚本都要将其值更新为最新值。你知道吗

如果一个脚本需要更改文件中的数据以供另一个脚本访问,那么它必须覆盖该文件中的数据,或者可以将数据放在其他地方,以便另一个脚本可以从第一个脚本编写数据的位置访问该数据。你知道吗


在下面的示例中,假设其他脚本或其他人通过不时覆盖variable来编辑some_module。你知道吗

可以使用reload函数将variable中定义的some_module更新为其最新值。下面的示例使用after每隔半秒更新label的文本:

import tkinter as tk
import importlib as imp         # to reload some_module after it has been imported

def show_var():
    global label
    global some_module

    try:
        imp.reload(some_module) # to reload some_module if it has already been imported
    except:
        import some_module      # to import some_module if it has never been imported

    label['text'] = some_module.variable
    label.after(500, show_var)  # to recursively call itself every 500 miliseconds


if __name__ == '__main__':
    root = tk.Tk()

    label = tk.Label(root)
    show_var()

    label.pack()
    root.mainloop()

some_module.py

variable = 3

使用类变量(BooleanVarDoubleVarIntVarStringVar)可能很麻烦,因为它们需要tk.Tk()的实例才能存在。你知道吗

相关问题 更多 >