2

谁能建议如何使用Python 中小Label部件的值检索和更新小部件?Scale目前它显示了一个非常大的实数。我尝试输入强制转换值,但这仅在我打印到空闲时才有效。我试过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()

在这里您可以看到非常大的实际值:

截屏

4

2 回答 2

4

我看不到控制 Scale 小部件分辨率的方法,但修改它生成的字符串相当容易。根据这些 ttk 文档,Scale 小部件返回一个浮点数,但在我的实验中它返回一个字符串,这有点烦人。

与其直接从slider附加到 Scale 小部件的变量中设置标签文本,我们可以将一个命令绑定到 Scale 小部件,将保存 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))

我对你的代码做了一些其他的小改动。首先,我将“star”导入替换为import tkinter as tk; 正如我在最近的回答中提到的那样,星号导入将 130 多个名称引入您的命名空间,这会造成很多不必要的混乱。

于 2016-07-03T08:18:13.243 回答
3

另一个不太复杂且易于使用的替代方案是使用 tkinter.Scale()类的实例,您可以使用该实例将选项注入resolution您想要的任何值。默认值是您要查找的值,因为它的值为 1

于 2016-07-03T08:17:48.553 回答