我编写了一个简单的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窗口没有焦点的情况下也要检测是否按下了这些键,则必须使用操作系统中的库或类似pynput,keyboard的库
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句