某些小部件 (如文本输入小部件) 的当前值设置可以通过使用特殊选项直接连接到应用程序变量。这些选项包括variable、textvariable、onvalue、offvalue和值。这种连接是双向的: 如果变量因任何原因而改变,它所连接的小部件将被更新以反映新的值。
不幸的是,在tkinter的当前实现中,不可能通过变量或textvariable选项将任意Python变量移交给小部件。唯一可行的变量是从tkinter中定义的名为Variable的类中子类化的变量。
已经定义了许多有用的变量子类: StringVar、IntVar、DoubleVar和BooleanVar。要读取此类变量的当前值,请对其调用get() 方法,并更改其值,然后调用set() 方法。如果您遵循此协议,小部件将始终跟踪变量的值,而无需您进一步干预。
例如:
class App(tk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack()
self.entrythingy = tk.Entry()
self.entrythingy.pack()
# Create the application variable.
self.contents = tk.StringVar()
# Set it to some value.
self.contents.set("this is a variable")
# Tell the entry widget to watch this variable.
self.entrythingy["textvariable"] = self.contents
# Define a callback for when the user hits return.
# It prints the current value of the variable.
self.entrythingy.bind('<Key-Return>',
self.print_contents)
def print_contents(self, event):
print("Hi. The current entry content is:",
self.contents.get())
root = tk.Tk()
myapp = App(root)
myapp.mainloop()
**