如何在 Python 中检索 tkinter ttk Scale 小部件的整数值?
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()
这里可以看到非常大的真实值:
另一个不那么复杂且易于使用的选项是使用 tkinter.Scale()
class 的实例,您可以将 resolution
选项注入到您想要的任何值。默认的就是你要找的那个因为它的值为1
我没有找到控制“缩放”小部件分辨率的方法,但修改它生成的字符串相当容易。根据 these ttk docs 缩放小部件 returns 一个浮点数,但在我的实验中它 returns 一个字符串,这有点烦人。
我们可以将命令绑定到 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" 导入;正如我在 .
中提到的,star 导入将超过 130 个名称引入您的命名空间,这会造成很多不必要的混乱
谁能建议如何使用 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()
这里可以看到非常大的真实值:
另一个不那么复杂且易于使用的选项是使用 tkinter.Scale()
class 的实例,您可以将 resolution
选项注入到您想要的任何值。默认的就是你要找的那个因为它的值为1
我没有找到控制“缩放”小部件分辨率的方法,但修改它生成的字符串相当容易。根据 these ttk docs 缩放小部件 returns 一个浮点数,但在我的实验中它 returns 一个字符串,这有点烦人。
我们可以将命令绑定到 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" 导入;正如我在