MouseWheel 上下绑定在 tkinter 中不起作用

Gra*_*per 1 python binding tkinter

我正在使用以下代码 -

self.table.Table.bind("<MouseWheel-Down>", lambda x: self.table.shiftTable('right'))
self.table.Table.bind('<MouseWheel-Up>', lambda x: self.table.shiftTable('left'))          #mousewheel up and down not working for unknown reasons
self.table.Table.bind('<KeyPress-Left>', lambda x: self.table.shiftTable('left'))
self.table.Table.bind('<KeyPress-Right>', lambda x: self.table.shiftTable('right'))
self.table.Table.bind('<Enter>', lambda x: self.table.Table.focus())
self.table.Table.bind('<Leave>', lambda x: self.mainUI_object.fg_root.focus())
Run Code Online (Sandbox Code Playgroud)

这里的问题是鼠标滚轮绑定不起作用,但没有给出错误。另一方面,以下代码段有效(注意缺少向上和向下说明符)-

self.table.Table.bind("<MouseWheel>", lambda x: self.table.shiftTable('right'))
Run Code Online (Sandbox Code Playgroud)

不工作的可能原因是什么?如何解决才能正常工作?

j_4*_*321 6

在 Windows 和 Mac 中,<MouseWheel-Down/Up>不是向上或向下转动鼠标滚轮的绑定,而是对应于同时使用鼠标滚轮并按向下/向上箭头键。MouseWheel 绑定不能指定方向,但滚动方向包含在 中event.delta。这意味着你可以做类似的事情

def mouse_wheel_binding(self, event):
    if event.delta > 0: 
        self.table.shiftTable('right')
    else:
        self.table.shiftTable('left')
Run Code Online (Sandbox Code Playgroud)

self.table.Table.bind("<MouseWheel>", self.mouse_wheel_binding)
Run Code Online (Sandbox Code Playgroud)

我没有 Windows 或 Mac,所以我不知道哪个标志对应于向上/向下,因此您可能需要切换左/右。

注意:在 Linux 中,鼠标滚轮绑定是特定方向的:MouseWheel-Up 是'<Button-4>',MouseWheel-Down 是 '<Button-5>',并且该"<MouseWheel>"绑定不起作用。