Python 如何在离散步骤中使用tkinter slider'Scale'小部件?
是否可能有一个滑块(Python 如何在离散步骤中使用tkinter slider'Scale'小部件?,python,tkinter,slider,tkinter-scale,Python,Tkinter,Slider,Tkinter Scale,是否可能有一个滑块(Scaletkinter中的小部件),其中操作滑块时显示的可能值是从列表中读取的离散值 我的列表中的值不是偶数步数,并且取决于具体情况 从我看到的所有示例中,可以指定最小值、最大值和步长值(一次n个值),但我的列表可能如下所示: list=['0', '2000', '6400', '9200', '12100', '15060', '15080'] 举个例子。再次重申,我希望在拉动滑块时,从示例列表[0]转到列表[1],或从列表[6]转到列表[5] 如果有人有任何其他建议
Scale
tkinter中的小部件),其中操作滑块时显示的可能值是从列表中读取的离散值
我的列表中的值不是偶数步数,并且取决于具体情况
从我看到的所有示例中,可以指定最小值、最大值和步长值(一次n个值),但我的列表可能如下所示:
list=['0', '2000', '6400', '9200', '12100', '15060', '15080']
举个例子。再次重申,我希望在拉动滑块时,从示例列表[0]转到列表[1],或从列表[6]转到列表[5]
如果有人有任何其他建议,可以轻松地从列表中的数百个项目中选择一个值,我洗耳恭听。我尝试了
选项菜单
小部件,但它很难查看。编辑您可以将滑块的命令设置为回调,让回调将当前值与列表进行比较,然后通过调用滑块上的set()跳转到最近的值
因此:
以及:
编辑:
显示完整的(但简单的示例)
我已经在python 2.7.6和3.3.2中对此进行了测试,即使在拖动滑块时,也会跳到鼠标当前所在位置的最近值,而不是仅在松开滑块时才跳。谢谢您的建议,虽然我在实现iti时遇到了问题,但我已经添加了一个完整的示例来向您展示它应该如何工作,并让您尝试一下。这是一个天才的解决方案。真不敢相信我竟然想不出来
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()