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

时间:2016-07-03 07:42:54

标签: python tkinter ttk tkinter-scale

有人可以建议如何使用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()

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

screenshot

2 个答案:

答案 0 :(得分:3)

我没有看到控制Scale小部件分辨率的方法,但是修改它产生的字符串相当容易。根据{{​​3}},Scale小部件返回一个浮点数,但在我的实验中它返回一个字符串,这有点烦人。

我不是直接从附加到Scale小部件的slider变量设置Label文本,而是将命令绑定到Scale小部件,该小部件将保存Scale的当前值的字符串转换回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;星号导入会在您的命名空间中引入130多个名称,这会产生很多不必要的混乱,正如我在these ttk docs中提到的那样。

答案 1 :(得分:2)

另一个不太复杂的选项和易于使用的替代方法是使用tkinter.Scale()类的实例,您可以使用resolution选项将ssh -i $KEYFILE_PATH ubuntu@$TARGET_INSTANCE_IP "bash" << EOF #!/bin/bash cat /home/ubuntu/temp.txt string=$(cat /home/ubuntu/temp.txt ) echo $string EOF 选项注入您想要的任何值。默认值是您要查找的值,因为其值为1