当全局变量改变它的值时如何调用函数?

nuk*_*0ne 3 python tkinter

change_label当全局变量a改变其值时如何调用函数?我试图change_variable模拟变量的实际变化(单击按钮时变量会发生变化)。

from tkinter import *

a = 3

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        self.master = master
        self.button = Button(self.master, text='Change Variable', command=self.change_variable)
        self.button.grid(row=0)
        self.label = Label(self.master, text='Test')
        self.label.grid(row=1)

    def change_label(self):
        self.label.config(bg='Red', fg='Yellow')

    def change_variable(self):
        global a
        a = 1

def main():
    root = Tk()
    Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 5

如果您使用 tkinter 特殊变量之一(StringVar等),您可以添加一个“跟踪”,每当设置或取消设置该变量时,该“跟踪”都会触发回调。

例如:

class Application(Frame):

    def __init__(self, master):
        Frame.__init__(self, master)
        ...
        self.a = tk.IntVar(value=3)
        self.a.trace("w", self.change_label)
        ...

    def change_label(self, *args):
        self.label.config(bg='Red', fg='Yellow')

    def change_variable(self):
        self.a.set(1)
Run Code Online (Sandbox Code Playgroud)

self.a这样,每当您通过方法设置 的值时set,与 绑定的函数trace就会被调用。

任何使用该变量的小部件也将被更新。例如,将标签更改为:

self.label = tk.Label(self.master, textvariable=self.a)
Run Code Online (Sandbox Code Playgroud)

单击该按钮时,请注意标签会发生变化以反映更改。

有关传递给跟踪函数的参数的描述,请参阅Tkinter 变量跟踪方法回调的参数是什么?

这些变量在这里有很好的描述:变量类(BooleanVar、DoubleVar、IntVar、StringVar)