【发布时间】:2022-07-09 05:19:49
【问题描述】:
我一直在研究如何通过event.state 解析tkinter 事件,以减少我必须调用root.bind() 的次数(例如,我可以避免同时绑定"<ButtonPress-1>" 和"<Shift-ButtonPress-1>"查找是否通过event.state 按下了换档)。当然,我非常依赖tkinter source code(特别是__repr__ 的定义,从第234 行开始)将event.state 的整数转换为我能理解的值:
def getStatefromInt(state_int):
# from https://github.com/python/cpython/blob/3.8/Lib/tkinter/__init__.py
if isinstance(state_int, int):
state = state_int
mods = ('Shift', 'Lock', 'Control',
'Mod1', 'Mod2', 'Mod3', 'Mod4', 'Mod5',
'Button1', 'Button2', 'Button3', 'Button4', 'Button5')
s = []
for i, n in enumerate(mods):
if state & (1 << i):
s.append(n)
state = state & ~((1<< len(mods)) - 1)
if state or not s:
s.append(hex(state))
return s
当事件发生时,state 不断出现的事情之一是Mod1。 Mod1 和其他ModX 状态代表什么? 我认为这个数字可能与按钮按下的类型相对应,但所有类型的鼠标点击只导致Mod1。我无法在网上找到有关这意味着什么的信息,而且我很难从源代码中看到它可能意味着什么。
【问题讨论】:
标签: python tkinter events event-handling