2017-03-16 66 views
1

当您在python tkinter标度中的槽(滑块的任一侧)单击时,滑块向左/右移动一个增量。在不影响滑块的情况下更改槽的trough字段的增量

如果按住鼠标,它将移动得更快,使用重复延迟& repeatinterval。

我想要的是,当您单击滑槽时,滑块会以较大的增量移动,而不会失去使用滑块以较小步长递增的能力。

我已经研究了规模小部件,并且可以看到它有一个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() 
+0

你尝试过简单地将它设置为某个值,看看它做什么? –

+0

我有,似乎没有什么区别... –

回答

0

使用resolution参数。

请参阅the docs,尤其是“绑定”部分中的第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() 
+0

当槽被点击时,这会改变增量,但它也会影响滑块。我仍然希望能够使用滑块增加1(或更多),但设置它,以便点击槽导致更大的跳跃... –

+0

啊我错过了OP中的这个要求。我用另一个解决方案编辑我的文章。 – Novel

+0

这很完美,谢谢! –

相关问题