在 mac os 上反转鼠标滚动方向

问题描述

我通过转到系统偏好设置/鼠标/滚动方向:自然 - 取消选择更改了我的 mac 上的鼠标滚动行为。但是我的 python 程序仍然使用自然滚动方向。我该如何逆转?

from tkinter import *

# initialize position and size for root window
position_x = 100
position_y = 50
size_x = 625
size_y = 600

root = Tk()
root.title("Mouse Kung Fu version {}".format("3.008"))
root.geometry("%dx%d+%d+%d" % (size_x,size_y,position_x,position_y))

F = Frame(root)
F.pack(fill=BOTH,side=LEFT)

# link up the canvas and scrollbar
S = Scrollbar(F)
C = Canvas(F,width=1600)
S.pack(side=RIGHT,fill=BOTH)
C.pack(side=LEFT,fill=BOTH,pady=10,padx=10)
S.configure(command=C.yview,orient="vertical")
C.configure(yscrollcommand=S.set)
if sys.platform == "win32":
    C.bind_all('<MouseWheel>',lambda event: C.yview_scroll(int(-1 * (event.delta / 120)),"units"))
elif sys.platform == "darwin":
    C.bind_all('<MouseWheel>',lambda event: C.yview_scroll(int(event.delta),"units"))
elif sys.platform == "linux":
    C.bind_all('<Button-4>',lambda event: C.yview('scroll',-1,'units'))
    C.bind_all('<Button-5>',1,'units'))

#  create frame inside canvas
FF = Frame(C)
C.create_window((0,0),window=FF,anchor=NW)

# create page content
for _ in range(100):
    Label(FF,text="foo").pack()
    Label(FF,text="bar").pack()

root.update()
C.config(scrollregion=C.bBox("all"))
mainloop()

解决方法

解决办法是修改sys.platform == "darwin"的绑定。将“event.delta”更改为“-1 * (event.delta)”

所以这是自然滚动方向:

elif sys.platform == "darwin":
    C.bind_all('<MouseWheel>',lambda event: C.yview_scroll(int(event.delta),"units"))

这是反向滚动方向:

elif sys.platform == "darwin":
    C.bind_all('<MouseWheel>',lambda event: C.yview_scroll(int(-1 *(event.delta)),"units"))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...