功能需求:
准备通过写一个上位机遥控器界面控制电机转动,具体功能与赛车游戏类似,当按下键盘一个键位时(以数字4键为例),界面上的“上”按钮变暗,只触发按钮事件一次,直到松开键盘键位,按钮复原,电机停转。
ps:起初想以按钮的setAutoRepeat()函数实现,发现没有效果,qt小白,有知道的大佬可以指教一下。
代码只给出类里面具体的两个重载函数,其余部分不懂的可以评论区:
def keyPressEvent(self,event): #重载
if event.key() == Qt.Key_4:
print("按键被按下")
self.pushButton.click() #点击创建的按钮实例,前提:按钮已绑定自定义事件
self.pushButton.setEnabled(False) #阻止按钮事件发生,防止重复触发按钮事件
def keyReleaseEvent(self, event): #重载
if event.key() == Qt.Key_4:
if event.isAutoRepeat(): #按钮按下状态,为True
pass
else: #按钮释放状态,为False
print("键盘被松开")
self.pushButton.setEnabled(True) #按钮释放,恢复点击按钮触发事件功能
self.pushButton.toggle() #按钮释放,恢复按钮状态(按钮由暗变亮)
具体实现效果简单描述就是,长按按键4时,只会传输一次控制指令给电机,界面的对应按钮会从亮变暗(自己设置的效果,亮代表没按,暗代表按钮按下),只有释放按钮时会传输一次停止控制指令给电机,界面的对应按钮会从暗变亮。