8

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

我列表中的值不是均匀的步骤,并且取决于情况。

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

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

举个例子。重申一下,我希望它在拉动滑块时从列表 [0] 到列表 [1] 或从列表 [6] 到列表 [5]。

如果有人有任何其他建议可以轻松地从列表中的数百个项目中选择一个值,我会全力以赴。我尝试了这个OptionMenu小部件,但它变得广泛而难以理解。

4

1 回答 1

8

编辑您可以将滑块的命令设置为回调,让该回调将当前值与您的列表进行比较,然后通过调用滑块上的 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 中对此进行了测试,即使在拖动滑块时,它也会跳转到与鼠标当前位置最近的值,而不是仅在松开滑块时才跳转。

于 2014-09-09T12:51:08.567 回答