【问题标题】:Change trough increment in python tkinter scale, without affecting slider在 python tkinter 刻度中更改槽增量,而不影响滑块
【发布时间】:2017-03-16 19:41:25
【问题描述】:

当您在 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()

【问题讨论】:

  • 您是否尝试过简单地将其设置为某个值以查看其作用?
  • 我有,好像没什么区别...

标签: python tkinter tkinter-scale


【解决方案1】:

使用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()

【讨论】:

  • 这确实会改变点击槽时的增量,但它也会影响滑块。我仍然希望能够使用滑块增加 1(或更多),但设置它以便单击低谷会导致更大的跳跃......
  • 啊,我错过了你的 OP 中的那个要求。我用另一个解决方案编辑了我的帖子。
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2018-08-12
相关资源
最近更新 更多