为什么tkinter scale小部件需要tkinter变量

时间:2018-11-12 05:56:27

标签: python python-3.x tkinter

我知道您不需要为像这样的比例指定变量:

scale = tk.Scale(root, from_ = 1, to = 100) # makes scale without variable
scaleValue = scale.get() # sets value to scale

但是,我需要一种方法来实时设置变量,并且每次更改比例值时都要设置。有没有一种方法可以在不将scaleValue不断重置为scale.get()的情况下进行工作?

2 个答案:

答案 0 :(得分:1)

通过使用variable = tk.DoubleVar()来创建tkinter变量,它将在发生更改时自动更新variable

scaleVar = tk.DoubleVar
scale = tk.Scale(
    root,
    from_ = 1,
    to = 100,
    variable = scaleVar    # makes scale with updating variable
)

答案 1 :(得分:1)

如果您使用类似IntVar()之类的值来跟踪该值,则可以看到该值已使用将检查当前值的功能自动更新。

如果您希望以浮点数的形式显示并返回该值,则可以使用DoubleVar(),然后在Scale小部件中将resolution=0.01设置为参数。

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.int_var = tk.IntVar()
        self.scale = tk.Scale(self, from_=1, to=100, variable=self.int_var)
        self.scale.pack()

        tk.Button(self, text="Check Scale", command=self.check_scale).pack()

    def check_scale(self):
        print(self.int_var.get())


if __name__ == "__main__":
    Example().mainloop()

结果:

enter image description here

对于使用DoubleVar()的示例,您可以执行以下操作:

import tkinter as tk

class Example(tk.Tk):
    def __init__(self):
        super().__init__()
        self.dou_var = tk.DoubleVar()
        self.scale = tk.Scale(self, from_=1, to=100, resolution=0.01, variable=self.dou_var)
        self.scale.pack()

        tk.Button(self, text="Check Scale", command=self.check_scale).pack()

    def check_scale(self):
        print(self.dou_var.get())


if __name__ == "__main__":
    Example().mainloop()

结果:

enter image description here