无法检测Shift和Ctrl键的状态

菲利普·M·费尔德曼

我编写了一个简单的PyQt5应用程序,它尝试检测Shift和Ctrl键的状态,每隔一秒检查一次。由于我不明白的原因,无论实际的键盘状态如何,代码始终会报告未按任何键。

import time

from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication, QWidget


class App(QWidget):
   def __init__(self):
      super().__init__()

      self.setGeometry(10, 30, 10, 10)
      self.show()

      while True:
         modifiers= QApplication.keyboardModifiers()

         if modifiers == QtCore.Qt.ShiftModifier:
            print("Shift key is down; Ctrl key is up.")
         elif modifiers == QtCore.Qt.ControlModifier:
            print("Shift key is up; Ctrl key is down")
         elif modifiers == (QtCore.Qt.ControlModifier | QtCore.Qt.ShiftModifier):
            print("Shift and Ctrl keys are both down.")
         else:
            print("Neither Shift nor Ctrl is down.")

         time.sleep(1)

   # end def __init__


if __name__ == '__main__':
   import sys

   app= QApplication(sys.argv)
   ex = App()

   sys.exit(app.exec_())
永乐

切勿在主线程中使用time.sleep,因为它会阻塞事件循环,如果您要执行定期任务,请使用QTimer:

from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QWidget


class App(QWidget):
    def __init__(self):
        super().__init__()

        self.setGeometry(10, 30, 10, 10)
        self.show()

        timer = QTimer(self, interval=1000, timeout=self.detect)
        timer.start()

    def detect(self):
        modifiers = QApplication.keyboardModifiers()

        if modifiers == Qt.ShiftModifier:
            print("Shift key is down; Ctrl key is up.")
        elif modifiers == Qt.ControlModifier:
            print("Shift key is up; Ctrl key is down")
        elif modifiers == (Qt.ControlModifier | Qt.ShiftModifier):
            print("Shift and Ctrl keys are both down.")
        else:
            print("Neither Shift nor Ctrl is down.")


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    ex = App()

    sys.exit(app.exec_())

注意:必须记住,只有在Qt窗口具有焦点的情况下,Qt才会检测到按下的键。如果即使在Qt窗口没有焦点的情况下也要检测是否按下了这些键,则必须使用操作系统中的库或类似pynputkeyboard的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅显示Ctrl,Shift,Alt键状态的实用程序?

来自分类Dev

使用Me.KeyDown无法检测到Ctrl + Shift + H

来自分类Dev

我的shift / ctrl和numlock键停止工作

来自分类Dev

从 Android Teamviewer 发送 Alt Shift 和 Ctrl 组合键

来自分类Dev

Python按键组合(Ctrl +键或Shift +键)

来自分类Dev

如何使用正则表达式检测CTRL + C和CTRL + V键按下?

来自分类Dev

隐藏的键绑定?(特别是Ctrl + Alt + D和Shift + Super +!)

来自分类Dev

隐藏的键绑定?(特别是Ctrl + Alt + D和Shift + Super +!)

来自分类Dev

Unity启动器:组合单击和修饰键(Shift,Alt,Ctrl,...)

来自分类Dev

操作系统可以处理与键盘分开的shift,ctrl和alt键信号吗?

来自分类Dev

Ctrl-Enter,Shift-Enter和Enter被解释为同一键

来自分类Dev

Anaconda Spyder 快捷键 Ctrl+Enter 和 Shift+Enter 不起作用

来自分类Dev

文本选择CTRL + SHIFT +光标键?

来自分类Dev

文本选择CTRL + SHIFT +光标键?

来自分类Dev

如何使用redux时间旅行并将其绑定到ctrl + z和ctrl + shift + z键绑定?

来自分类Dev

键盘快捷键gnome-terminal(ctrl-tab)和(ctrl-shift-tab)在12.04吗?

来自分类Dev

键盘快捷键gnome-terminal(ctrl-tab)和(ctrl-shift-tab)在12.04吗?

来自分类Dev

按下Shift键后无法在gEdit中恢复鼠标状态

来自分类Dev

按下Shift键后无法在gEdit中恢复鼠标状态

来自分类Dev

按键故障-Ctrl键和Shift键似乎没有按下,或者按下时不起作用

来自分类Dev

按键故障-Ctrl键和Shift键似乎没有按下,或者按下时不起作用

来自分类Dev

检测使用事件监听器和数组对视频播放器进行编程的Ctrl + Shift键检测问题

来自分类Dev

Firefox中奇怪的CTRL键检测

来自分类Dev

Javascript和ctrl键冲突

来自分类Dev

ATI和Ctrl + Shift + F11

来自分类Dev

使用CTRL + SHIFT +方向键选择整个单词

来自分类Dev

如何获取Excel宏快捷键的Ctrl + Shift组合?

来自分类Dev

jQuery按键无法检测CTRL + V

来自分类Dev

.bind()无法用于Shift键绑定?

Related 相关文章

  1. 1

    仅显示Ctrl,Shift,Alt键状态的实用程序?

  2. 2

    使用Me.KeyDown无法检测到Ctrl + Shift + H

  3. 3

    我的shift / ctrl和numlock键停止工作

  4. 4

    从 Android Teamviewer 发送 Alt Shift 和 Ctrl 组合键

  5. 5

    Python按键组合(Ctrl +键或Shift +键)

  6. 6

    如何使用正则表达式检测CTRL + C和CTRL + V键按下?

  7. 7

    隐藏的键绑定?(特别是Ctrl + Alt + D和Shift + Super +!)

  8. 8

    隐藏的键绑定?(特别是Ctrl + Alt + D和Shift + Super +!)

  9. 9

    Unity启动器:组合单击和修饰键(Shift,Alt,Ctrl,...)

  10. 10

    操作系统可以处理与键盘分开的shift,ctrl和alt键信号吗?

  11. 11

    Ctrl-Enter,Shift-Enter和Enter被解释为同一键

  12. 12

    Anaconda Spyder 快捷键 Ctrl+Enter 和 Shift+Enter 不起作用

  13. 13

    文本选择CTRL + SHIFT +光标键?

  14. 14

    文本选择CTRL + SHIFT +光标键?

  15. 15

    如何使用redux时间旅行并将其绑定到ctrl + z和ctrl + shift + z键绑定?

  16. 16

    键盘快捷键gnome-terminal(ctrl-tab)和(ctrl-shift-tab)在12.04吗?

  17. 17

    键盘快捷键gnome-terminal(ctrl-tab)和(ctrl-shift-tab)在12.04吗?

  18. 18

    按下Shift键后无法在gEdit中恢复鼠标状态

  19. 19

    按下Shift键后无法在gEdit中恢复鼠标状态

  20. 20

    按键故障-Ctrl键和Shift键似乎没有按下,或者按下时不起作用

  21. 21

    按键故障-Ctrl键和Shift键似乎没有按下,或者按下时不起作用

  22. 22

    检测使用事件监听器和数组对视频播放器进行编程的Ctrl + Shift键检测问题

  23. 23

    Firefox中奇怪的CTRL键检测

  24. 24

    Javascript和ctrl键冲突

  25. 25

    ATI和Ctrl + Shift + F11

  26. 26

    使用CTRL + SHIFT +方向键选择整个单词

  27. 27

    如何获取Excel宏快捷键的Ctrl + Shift组合?

  28. 28

    jQuery按键无法检测CTRL + V

  29. 29

    .bind()无法用于Shift键绑定?

热门标签

归档