【问题标题】:ModX in event.state in tkinter?tkinter 中 event.state 中的 ModX?
【发布时间】: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 不断出现的事情之一是Mod1Mod1 和其他ModX 状态代表什么? 我认为这个数字可能与按钮按下的类型相对应,但所有类型的鼠标点击只导致Mod1。我无法在网上找到有关这意味着什么的信息,而且我很难从源代码中看到它可能意味着什么。

【问题讨论】:

    标签: python tkinter events event-handling


    【解决方案1】:

    ModX 表示修改,Modifier Key

    在计算中,修饰键是一个特殊键(或组合) 临时修改正常动作的电脑键盘 同时按下另一个键。本身,修饰键 通常什么都不做;也就是说,按 ⇧ Shift、Alt 或 Ctrl 中的任何一个 单独的键(通常)不会触发计算机的任何操作。

    Tkinter 是一个跨平台的 GUI 工具包,使用系统特定的工具。不同的操作系统使用不同的方法,例如运行 Linux signals Alt Gr 的 PC 作为 Mod 5 而运行 Windows 的 PC 发出与 Control-Alt 相同的击键信号。你可以看看Modifier Keys on tcl-lang.ord

    Event.state 是一个位掩码,指示在事件触发时某些修改键和鼠标按钮处于按下或激活状态,并且由于here 指出的系统特定设施而不可靠。

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 2012-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 2014-12-29
      • 2012-10-26
      • 1970-01-01
      相关资源
      最近更新 更多