[英]How to retrieve the integer value of tkinter ttk Scale widget in Python?
谁能建议如何使用Python中“ Scale
小部件的值检索和更新“ Label
小部件? 目前,它显示出非常大的实数。 我试图键入强制转换值,但这仅在我打印到空闲时有效。 我尝试了slider.get()
但标签为空。 还尝试了int(slider.get())
,当我打印到空闲时它可以工作。
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Playing with Scales")
mainframe = ttk.Frame(root, padding="24 24 24 24")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
slider = IntVar()
ttk.Scale(mainframe, from_=0, to_=100, length=300, variable=slider).grid(column=1, row=4, columnspan=5)
ttk.Label(mainframe, textvariable=slider).grid(column=1, row=0, columnspan=5)
for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
root.mainloop()
在这里,您可以看到非常大的实际价值:
我没有控制Scale小部件分辨率的方法,但修改它产生的字符串相当容易。 根据这些ttk文档 ,Scale小部件返回一个浮点数,但是在我的实验中,它返回一个字符串,这有点令人讨厌。
可以直接将命令绑定到Scale小部件,而不是直接从Scale小部件上附加的slider
变量设置Label文本,该命令将将Scale的当前值转换为浮点数,然后使用所需位数进行格式化; 下面的代码在小数点后显示2位数字。
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Playing with Scales")
mainframe = ttk.Frame(root, padding="24 24 24 24")
mainframe.grid(column=0, row=0, sticky=('N', 'W', 'E', 'S'))
slider = tk.StringVar()
slider.set('0.00')
ttk.Scale(mainframe, from_=0, to_=100, length=300,
command=lambda s:slider.set('%0.2f' % float(s))).grid(column=1, row=4, columnspan=5)
ttk.Label(mainframe, textvariable=slider).grid(column=1, row=0, columnspan=5)
for child in mainframe.winfo_children():
child.grid_configure(padx=5, pady=5)
root.mainloop()
如果只希望Label显示整数值,则将slider
的初始化更改为
slider.set('0')
并将回调函数更改为
lambda s:slider.set('%d' % float(s))
我对您的代码做了其他一些小的更改。 首先,我用import tkinter as tk
代替了“ star” import; 正如我在最近的回答中提到的,star导入将超过130个名称引入到您的命名空间中,这会造成很多不必要的混乱。
另一个不太复杂且易于使用的替代方法是使用tkinter.Scale()
类的实例,通过该实例,您可以将resolution
选项注入所需的任何值。 默认值是您要查找的值,因为它的值为1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.