如何使用tkinter滑块`Scale`小部件与离散步骤?

时间:2014-09-09 12:44:35

标签: python tkinter slider tkinter-scale

是否可以在tkinter中有一个滑块(Scale小部件),操作滑块时显示的可能值是从列表中读取的离散值?

我的列表中的值不是偶数步骤,并且取决于具体情况。

从我见过的所有示例中,您可以指定最小值,最大值和步长值(一次n个值),但我的列表可能如下所示:

list=['0', '2000', '6400', '9200', '12100', '15060', '15080']

仅作为一个例子。重申一点,我希望它在拉动滑块时从例如list [0]到list [1]或list [6]到list [5]。

如果任何人有任何其他建议可以轻松地从列表中的数百个项目中选择一个值,我全神贯注。我尝试了OptionMenu小部件,但它得到了广泛而难以获得的视图。

1 个答案:

答案 0 :(得分:3)

编辑你可以将滑块的命令设置为回调,让回调将当前值与列表进行比较,然后通过调用滑块上的set()跳转到最近的

这样:

slider = Slider(parent, from_=0, to=100000, command=callback)

def callback(event):
    current = event.widget.get()
    #compare value here and select nearest
    event.widget.set(newvalue)

编辑: 显示一个完整的(但简单的例子)

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

valuelist = [0,10,30,60,100,150,210,270]

def valuecheck(value):
    newvalue = min(valuelist, key=lambda x:abs(x-float(value)))
    slider.set(newvalue)

root = tk.Tk()

slider = tk.Scale(root, from_=min(valuelist), to=max(valuelist), command=valuecheck, orient="horizontal")

slider.pack()

root.mainloop()

我已经在python 2.7.6和3.3.2中对此进行了测试,即使在拖动滑块时,它也会跳转到鼠标当前所在的最接近的值,而不是在放开滑块时跳转。