2017-03-16 72 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

這很完美,謝謝! –

相關問題