在 python tkinter 刻度中更改槽增量,而不影响滑块
Change trough increment in python tkinter scale, without affecting slider
当您在 python tkinter 刻度中单击槽(滑块的任一侧)时,滑块将移动一个增量到 left/right。
如果你按住鼠标,它会移动得更快,使用repeatdelay & repeatinterval。
我想要的是当您在槽中单击时让滑块以更大的增量移动,而不会失去使用滑块以更小的步长增加的能力。
我研究了一下scale widget,可以看到它有一个bigincrement字段,就是为了支持这个,但是我不确定什么时候使用bigincrement?
我也看过 resolution
,它确实改变了滑块的跳跃量,但它失去了通过拖动滑块进行微调的能力。
那么,每次单击槽时,我如何配置比例以使用 bigincrement 作为值来增加比例。并且仍然能够拖动滑块以获得更细粒度的增量?
示例代码:
from Tkinter import *
master = Tk()
w = Scale(master, from_=0, to=100, bigincrement=10)
w.pack()
w = Scale(master, from_=0, to=200, orient=HORIZONTAL, bigincrement=100)
w.pack()
mainloop()
使用resolution
参数。
参见 the docs,尤其是 "bindings" 部分中的第 1 点。
编辑:如果您想在不影响分辨率的情况下更改增量,则必须劫持滑块的工作方式。您可以像这样制作自己的滑块版本:
import Tkinter as tk
class Jarvis(tk.Scale):
'''a scale where a trough click jumps by a specified increment instead of the resolution'''
def __init__(self, master=None, **kwargs):
self.increment = kwargs.pop('increment',1)
tk.Scale.__init__(self, master, **kwargs)
self.bind('<Button-1>', self.jump)
def jump(self, event):
clicked = self.identify(event.x, event.y)
if clicked == 'trough1':
self.set(self.get() - self.increment)
elif clicked == 'trough2':
self.set(self.get() + self.increment)
else:
return None
return 'break'
# example useage:
master = tk.Tk()
w = Jarvis(master, from_=0, to=200, increment=10, orient=tk.HORIZONTAL)
w.pack()
w = Jarvis(master, from_=0, to=200, increment=30, orient=tk.HORIZONTAL)
w.pack()
master.mainloop()
当您在 python tkinter 刻度中单击槽(滑块的任一侧)时,滑块将移动一个增量到 left/right。
如果你按住鼠标,它会移动得更快,使用repeatdelay & repeatinterval。
我想要的是当您在槽中单击时让滑块以更大的增量移动,而不会失去使用滑块以更小的步长增加的能力。
我研究了一下scale widget,可以看到它有一个bigincrement字段,就是为了支持这个,但是我不确定什么时候使用bigincrement?
我也看过 resolution
,它确实改变了滑块的跳跃量,但它失去了通过拖动滑块进行微调的能力。
那么,每次单击槽时,我如何配置比例以使用 bigincrement 作为值来增加比例。并且仍然能够拖动滑块以获得更细粒度的增量?
示例代码:
from Tkinter import *
master = Tk()
w = Scale(master, from_=0, to=100, bigincrement=10)
w.pack()
w = Scale(master, from_=0, to=200, orient=HORIZONTAL, bigincrement=100)
w.pack()
mainloop()
使用resolution
参数。
参见 the docs,尤其是 "bindings" 部分中的第 1 点。
编辑:如果您想在不影响分辨率的情况下更改增量,则必须劫持滑块的工作方式。您可以像这样制作自己的滑块版本:
import Tkinter as tk
class Jarvis(tk.Scale):
'''a scale where a trough click jumps by a specified increment instead of the resolution'''
def __init__(self, master=None, **kwargs):
self.increment = kwargs.pop('increment',1)
tk.Scale.__init__(self, master, **kwargs)
self.bind('<Button-1>', self.jump)
def jump(self, event):
clicked = self.identify(event.x, event.y)
if clicked == 'trough1':
self.set(self.get() - self.increment)
elif clicked == 'trough2':
self.set(self.get() + self.increment)
else:
return None
return 'break'
# example useage:
master = tk.Tk()
w = Jarvis(master, from_=0, to=200, increment=10, orient=tk.HORIZONTAL)
w.pack()
w = Jarvis(master, from_=0, to=200, increment=30, orient=tk.HORIZONTAL)
w.pack()
master.mainloop()