在不影响滑块的情况下,更改python tkinter scale中的槽增量

在不影响滑块的情况下,更改python tkinter scale中的槽增量,python,tkinter,tkinter-scale,Python,Tkinter,Tkinter Scale,在python tkinter缩放中单击槽(滑块的任一侧)时,滑块向左/向右移动一个增量 如果按住鼠标,它将使用repeatdelay和repeatinterval移动得更快 我想要的是,当你在槽中单击鼠标时,滑块以更大的增量移动,而不会失去使用滑块以更小的步长递增的能力 我已经研究了scale小部件,可以看到它有一个bigincrement字段,这是为了支持它,但我不确定何时使用bigincrement 我还研究了分辨率,它确实改变了滑块的跳跃量,但它失去了通过拖动滑块进行微调的能力 因此,我

在python tkinter缩放中单击槽(滑块的任一侧)时,滑块向左/向右移动一个增量

如果按住鼠标,它将使用repeatdelay和repeatinterval移动得更快

我想要的是,当你在槽中单击鼠标时,滑块以更大的增量移动,而不会失去使用滑块以更小的步长递增的能力

我已经研究了scale小部件,可以看到它有一个bigincrement字段,这是为了支持它,但我不确定何时使用bigincrement

我还研究了
分辨率
,它确实改变了滑块的跳跃量,但它失去了通过拖动滑块进行微调的能力

因此,我如何配置scale,使其在每次单击槽时使用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()

使用
分辨率
参数

请参阅,特别是“绑定”部分中的第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()
将Tkinter作为tk导入
Jarvis类(传统规模):
''一个刻度,其中槽点击以指定的增量而不是分辨率跳跃''
定义初始化(自,主=无,**kwargs):
self.increment=kwargs.pop('increment',1)
传统音阶。初始音阶(自、主、**kwargs)
self.bind(“”,self.jump)
def跳转(自身、事件):
单击=自我识别(event.x,event.y)
如果单击=='trough1':
self.set(self.get()-self.increment)
elif clicked==“trough2”:
self.set(self.get()+self.increment)
其他:
一无所获
返回“中断”
#示例用途:
master=tk.tk()
w=Jarvis(主,从0到200,增量=10,方向=tk.水平)
w、 包()
w=Jarvis(主,从0到200,增量=30,方向=tk.水平)
w、 包()
master.mainloop()

使用
分辨率
参数

请参阅,特别是“绑定”部分中的第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()
将Tkinter作为tk导入
Jarvis类(传统规模):
''一个刻度,其中槽点击以指定的增量而不是分辨率跳跃''
定义初始化(自,主=无,**kwargs):
self.increment=kwargs.pop('increment',1)
传统音阶。初始音阶(自、主、**kwargs)
self.bind(“”,self.jump)
def跳转(自身、事件):
单击=自我识别(event.x,event.y)
如果单击=='trough1':
self.set(self.get()-self.increment)
elif clicked==“trough2”:
self.set(self.get()+self.increment)
其他:
一无所获
返回“中断”
#示例用途:
master=tk.tk()
w=Jarvis(主,从0到200,增量=10,方向=tk.水平)
w、 包()
w=Jarvis(主,从0到200,增量=30,方向=tk.水平)
w、 包()
master.mainloop()

您是否尝试过简单地将其设置为某个值以查看其功能?我尝试过,似乎没有任何区别…您是否尝试过简单地将其设置为某个值以查看其功能?我尝试过,似乎没有任何区别…这确实会更改单击槽时的增量,但也会影响滑块。我仍然希望能够使用滑块增加1(或更多),但设置它,以便单击槽导致更大的跳跃…啊,我在你的操作中错过了这一要求。我用另一种解决方案编辑了我的文章。这确实会在单击槽时更改增量,但也会影响滑块。我仍然希望能够使用滑块增加1(或更多),但设置它,使点击槽导致更大的跳跃…啊,我错过了你的OP要求。我用另一个解决方案编辑了我的文章。