gpt4 book ai didi

python - 如何在 Python 中检索 tkinter ttk Scale 小部件的整数值?

转载 作者:行者123 更新时间:2023-11-28 21:46:20 25 4
gpt4 key购买 nike

谁能建议如何使用 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()

这里可以看到非常大的真实值:

screenshot

最佳答案

我没有找到一种方法来控制 Scale 小部件的分辨率,但是修改它生成的字符串相当容易。根据these ttk docs Scale 小部件返回一个 float ,但在我的实验中它返回一个字符串,这有点烦人。

我们可以将命令绑定(bind)到 Scale 小部件,而不是直接从附加到 Scale 小部件的 slider 变量设置 Label 文本,该命令将保存 Scale 当前值的字符串转换回 float ,并且然后用所需的位数格式化 float ;下面的代码显示小数点后 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”导入;正如我在 this recent answer 中提到的,star import 将 130 多个名称引入您的命名空间,这会造成很多不必要的困惑。 .

关于python - 如何在 Python 中检索 tkinter ttk Scale 小部件的整数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com