何时使用Variable类? (BooleanVar,DoubleVar,IntVar,StringVar)

时间:2017-11-16 16:38:01

标签: python tkinter tk

可以tkinter.widget.configure(text="our text")用于所有小部件吗?使用的优点或主要目的是什么:

var_cls = tkinter.StringVar()
tkinter.widget.configure(textvariable=var_cls)

是否可以更方便地在方法/类之间共享var_cls

变量类的示例:

import tkinter as tk
root = tk.Tk()
var = tk.StringVar(value="This will be on the label.")
tk.Label(root, textvariable=var).pack()
root.mainloop()

没有Variable类的示例:

import tkinter as tk
root = tk.Tk()
tk.Label(root, text="This will be on the label.").pack()
root.mainloop()

2 个答案:

答案 0 :(得分:6)

在tkinter应用程序中,很少需要StringVar(以及IntVarBooleanVarDoubleVar)。底层的tcl / tk解释器为其所有变量提供了特殊功能,因此存在这些包装器以利用这些功能。

这些变量的两大优势是:

  1. 您可以将一个变量与多个小部件相关联,以便两个或多个小部件始终显示完全相同的信息
  2. 您可以绑定值在值更改时调用的函数。
  3. 我的意见是你不应该使用它们,除非你特别需要这两个功能之一。如果您只需要获取或设置窗口小部件的值,则可以在窗口小部件本身上执行此操作(例如:entry_widget.insert(...),label_widget.configure(text ='...')等) 。

    我觉得他们通过引入一个需要管理的额外对象来增加开销,除非你利用上述两个功能,否则不会提供任何额外的好处。

答案 1 :(得分:1)

StringVar可以绑定到窗口小部件,因此您只需要在StringVar上设置句柄,然后您可以修改其值并自动更新。否则,您需要保持小部件本身的处理并处理事件循环的东西等。基本上,当值可能改变时,您应该使用StringVar等。如果它确定是静态的,你就不需要它了。