【问题标题】:GTK: How to determine ctl/alt key state when the mouse is clicked?GTK:单击鼠标时如何确定 ctrl/alt 键状态?
【发布时间】:2020-08-15 15:12:49
【问题描述】:

我知道当按下另一个键时,我可以从 keypress 事件中获取 ctl/alt 键状态。但是当点击鼠标按钮时,我找不到任何方法来检测键状态。是的,当按下和释放 ctl/alt 键时,我会收到事件,只要窗口保持焦点,我就可以跟踪它们是向上还是向下。但是,如果用户点击桌面使我的窗口失去焦点,然后按住 ctl 或 alt 键,然后点击我的窗口,我的代码将不会看到 ctl 键按下事件,并且不会知道它已关闭。

有没有办法在鼠标点击或其他一些非键盘事件发生时检查这些修饰键的状态?

【问题讨论】:

    标签: gtk mouseevent keyboard-events


    【解决方案1】:

    与其尝试永久保持状态,不如在每次处理事件时检查修饰符。

    例子:

    https://developer.gnome.org/gtk3/stable/checklist-modifiers.html

    Detect ctrl+click on button in pygtk

    【讨论】:

    • 哦。我没有读过关于 get_state() 的内容,也没有想过在鼠标事件上调用它,因为它正在检索键盘信息。看起来是一个正确的答案,但我还没有验证。
    • 问题:您的 pygtk 示例调用 get_state(),但另一篇文章似乎说总是调用 gtk_accelerator_get_default_mod_mask() 来获取修饰符。这些似乎是相互排斥的。也许 pygtk 代码只是为了向我展示一个代码示例(它的做法并不完全正确),而 GTK 文档中的页面显示了正确的做法。真的吗?请为我澄清一下。
    • 我自己也注意到了这一点,但没有深入研究并找出其中的区别,或者哪种方式最好。
    • 我说的不对。两个 URL 都使用事件状态。第一个将其与调用函数的结果进行与运算,另一个将其与各种 GDK_*_MASK 常量进行与运算。出于我的目的,我看不到第一种方法添加了什么。我做了一些测试,无论哪种方式我都得到相同的答案。无论如何,我要到此为止,并将这个问题标记为已回答。
    猜你喜欢
    • 2012-08-15
    • 2010-11-19
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多