1

当您在 python tkinter 刻度中单击槽(滑块的任一侧)时,滑块向左/向右移动一个增量。

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

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

我研究了 scale 小部件,可以看到它有一个 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()
4

1 回答 1

0

使用resolution论据。

请参阅文档,尤其是“绑定”部分中的第 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()
于 2017-03-16T20:22:27.310 回答