【问题标题】:Remove ttk Combobox Mousewheel Binding删除 ttk Combobox 鼠标滚轮绑定
【发布时间】:2017-05-30 17:57:50
【问题描述】:

我有一个 ttk 组合框,我想从鼠标滚轮上解除绑定,以便在组合框处于活动状态时使用滚轮滚动不会更改值(而是滚动框架)。

我试过解除绑定以及绑定到空函数,但都不起作用。见下文:

import Tkinter as tk
import ttk


class app(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.interior = tk.Frame(self)

        tkvar = tk.IntVar()
        combo = ttk.Combobox(self.interior,
                             textvariable = tkvar,
                             width = 10,
                             values =[1, 2, 3])
        combo.unbind("<MouseWheel>")
        combo.bind("<MouseWheel>", self.empty_scroll_command)
        combo.pack()
        self.interior.pack()


    def empty_scroll_command(self, event):
        return

sample = app()
sample.mainloop()

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 向我们展示Minimal, Complete, and Verifiable example。另外,您使用的是什么操作系统?
  • 使用可用于测试的类更新示例。在 Windows 上使用 2.7。
  • 你的例子不完整,也没有说明你的问题。
  • 抱歉 - 忘记打包了。请注意,这本身没有任何问题。我的问题是我如何配置组合框,以便在选择一个选项后,使用鼠标滚轮不会更改选择...滚轮仅控制框架而不更改选择。感谢您的帮助。
  • 我可以直接回答你的问题:绑定鼠标滚轮,使用return "break"停止升级。我怀疑这不会解决您更大的问题,除非您提供完整的示例,否则我无法帮助您。

标签: python tkinter ttk


【解决方案1】:

默认绑定在内部小部件类上,在您添加任何自定义绑定之后执行。您可以删除会影响整个应用程序的默认绑定,或者您可以将特定小部件绑定到返回字符串 "break" 的自定义函数,这将阻止运行默认绑定。

移除类绑定

ttk 组合框的内部类是TCombobox。你可以把它传给unbind_class

# Windows & OSX
combo.unbind_class("TCombobox", "<MouseWheel>")

# Linux and other *nix systems:
combo.unbind_class("TCombobox", "<ButtonPress-4>")
combo.unbind_class("TCombobox", "<ButtonPress-5>")

添加自定义绑定

当一个人的绑定返回字符串"break"时,这将阻止处理默认绑定。

# Windows and OSX
combo.bind("<MouseWheel>", self.empty_scroll_command)

# Linux and other *nix systems
combo.bind("<ButtonPress-4>", self.empty_scroll_command)
combo.bind("<ButtonPress-5>", self.empty_scroll_command)

def empty_scroll_command(self, event):
    return "break"

【讨论】:

  • 这两个都可以完美运行。我选择移除类绑定,这样框架的滚动功能得以保留。感谢您的帮助和清晰的示例!
  • @AndrewBrown:删除类绑定不应影响除其他组合框之外的任何内容。它不会影响框架或任何其他小部件的滚动。
  • 由于某种原因,在组合框仍处于焦点(突出显示)时,使用自定义绑定选项没有滚动。我使用带有根的垂直滚动画布 - bind_all 命令进行滚动。可能是我的设置中的一些东西......不要太担心,因为我有一个可行的选择,但如果你有任何想法,请告诉我。再次感谢!
猜你喜欢
  • 2023-02-13
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
相关资源
最近更新 更多