Python 为什么tkinter scale小部件需要tkinter变量
我理解,您不需要为这样的比例指定变量:Python 为什么tkinter scale小部件需要tkinter变量,python,python-3.x,tkinter,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()?通过使用variable=tk.DoubleVar()生成t
scale = tk.Scale(root, from_ = 1, to = 100) # makes scale without variable
scaleValue = scale.get() # sets value to scale
一、 然而,我们需要一种方法来实时设置一个变量,并且每次刻度值都会发生变化。有没有一种方法可以在不经常将
scaleValue
重置为scale.get()
?通过使用variable=tk.DoubleVar()
生成tkinter变量,当发生更改时,它将自动更新变量
scaleVar = tk.DoubleVar
scale = tk.Scale(
root,
from_ = 1,
to = 100,
variable = scaleVar # makes scale with updating variable
)
如果您使用类似于IntVar()
的函数来跟踪该值,您可以看到它是自动更新的,并带有一个检查当前值的函数
如果希望将值显示并返回为浮点值,则可以使用DoubleVar()
,然后还可以将resolution=0.01
设置为Scale小部件中的参数
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()
结果:
例如,使用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()
结果:
您可以使用tkinter变量类,并通过其变量=
配置选项将其分配给缩放
小部件。这里有一些关于的文档,可以帮助您开始。另见。棘手的部分是实时执行,因为tkinter不支持并发性,所以您需要通过队列或类似的方式在GUI和生成数据的任何对象之间进行通信。我猜,scaleValue=tk.IntVar()
的可能重复应该可以做到这一点,对吗?@geetransiti在我的示例中添加了一个更新,其中还包括一个DoubleVar()
。要正确使用此选项,还需要将分辨率设置为如下所示的浮点:resolution=0.01
Ah。滑块可以输出浮点或整数,具体取决于分辨率,默认分辨率为1。目前我只需要整数输出,但现在我知道如何获得浮点输入。谢谢:DBoolVar
不是什么东西。也就是说,BooleanVar()
在这里仍然没有用处,因为它只会返回true.shot我是说tk.DoubleVar()。。。看起来我有个脑屁,DoubleVar更好。我认为IntVar在这里是最好的,因为它将返回一个整数,而您的滑块不需要返回浮点。DoubleVar返回一个浮点值。我听说滑块返回一个浮点值,这意味着如果我使用tk.IntVar()
,它会将滑块值转换为int,对吗?滑块从不显示浮点值。也许这是一个需要设置的选项。这里有一篇关于Int和Double的帖子。