由于在Python通过pyqt写界面时,有时候会用到,通过按键退出,所以特此记录一下。
import sys
from PyQt5.QtWidgets import QApplication,QWidget
from PyQt5 import QtCore
from PyQt5.QtCore import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 200)
self.setFixedWidth(300)
self.setFixedHeight(200)
self.setWindowTitle('按键检测')
self.show()
# 检测键盘回车按键
def keyPressEvent(self, event):
print("按下:" + str(event.key()))
# 举例
if(event.key() == Qt.Key_Escape):
print('测试:ESC')
if(event.key() == Qt.Key_A):
print('测试:A')
if(event.key() == Qt.Key_1):
print('测试:1')
if(event.key() == Qt.Key_Enter):
print('测试:Enter')
if(event.key() == Qt.Key_Space):
print('测试:Space')
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
print("鼠标左键点击")
elif event.button() == Qt.RightButton:
print("鼠标右键点击")
elif event.button() == Qt.MidButton:
print("鼠标中键点击")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())
另外一种监听形式
from pynput import keyboard
import threading
import time
import sys
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(key.char))
except AttributeError:
print('special key {0} pressed'.format(key))
def on_release(key):
print('{0} released'.format(key))
if key == keyboard.Key.esc:
return False
outdata=False
class myThread (threading.Thread):
def __init__(self,):
threading.Thread.__init__(self)
def run(self):
print ("开始线程:" + self.name)
global outdata
while True:
outdata = False
with keyboard.Listener(
on_press=on_press,
on_release=on_release) as listener:
listener.join()
outdata = True
break
# if outdata == True:
print("True")
class myThread2 (threading.Thread):
global outdata
def __init__(self, ):
threading.Thread.__init__(self)
def run(self):
print ("开始线程:" + self.name)
while True:
if outdata==True:
print("-----------------")
sys.exit()
# 创建新线程
thread1 = myThread()
thread2 = myThread2()
# 开启新线程
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print ("退出主线程")