Python Qt.Key_空格不触发

Python Qt.Key_空格不触发,python,python-3.x,pyqt5,Python,Python 3.x,Pyqt5,尝试创建计时器时,我想使用空格激活我创建的计时器功能: def按键释放事件(self,e): #如果e.key()==Qt.key\u空间: 如果(e.key()==Qt.key\u T): self.isCounting=不self.isCounting 如果self.isCounting==True: self.timerStart=time.time() 其他: #返回经过的时间 打印(time.time()-self.timerStart) 然而,这是行不通的。我使用的任何其他按钮,如

尝试创建计时器时,我想使用
空格
激活我创建的计时器功能:

def按键释放事件(self,e):
#如果e.key()==Qt.key\u空间:
如果(e.key()==Qt.key\u T):
self.isCounting=不self.isCounting
如果self.isCounting==True:
self.timerStart=time.time()
其他:
#返回经过的时间
打印(time.time()-self.timerStart)
然而,这是行不通的。我使用的任何其他按钮,如“t”、“0”等。。。干活儿。默认情况下是否有其他东西在使用
空格
,或者是什么导致了此问题

MRE:


问题在于,尽管按键事件没有发送到QPushButton,但它不会被忽略,因此不会通知窗口。解决方案是忽略eventFilter中的按键按下和按键释放:

def eventFilter(self, obj, event):
    if obj is self.button and event.type() == QEvent.KeyPress:
        event.ignore()
        return True
    if obj is self.button and event.type() == QEvent.KeyRelease:
        event.ignore()
    return super().eventFilter(obj, event)
更简单的解决方案是使用QShortcut:

    # ...
    self.show()

    shorcut = QShortcut(Qt.Key_Space, self, autoRepeat=False)
    shorcut.activated.connect(self.process_time)

def process_time(self):
    self.isCounting = not self.isCounting
    if self.isCounting == True:
        self.timerStart = time.time()
    else:
        print(time.time() - self.timerStart)

问题在于,尽管按键事件没有发送到QPushButton,但它不会被忽略,因此不会通知窗口。解决方案是忽略eventFilter中的按键按下和按键释放:

def eventFilter(self, obj, event):
    if obj is self.button and event.type() == QEvent.KeyPress:
        event.ignore()
        return True
    if obj is self.button and event.type() == QEvent.KeyRelease:
        event.ignore()
    return super().eventFilter(obj, event)
更简单的解决方案是使用QShortcut:

    # ...
    self.show()

    shorcut = QShortcut(Qt.Key_Space, self, autoRepeat=False)
    shorcut.activated.connect(self.process_time)

def process_time(self):
    self.isCounting = not self.isCounting
    if self.isCounting == True:
        self.timerStart = time.time()
    else:
        print(time.time() - self.timerStart)

第二部分很好,谢谢。我也有一个问题,在一个特定的延迟后重复按键,就像它不断按下和释放一样,在这个过程中激活快捷键。我应该问另一个问题,还是与QShortcut有关?@CarlosMedina尝试我的更新,结果是,只要你按下按钮,事件仍然每隔T秒发送一次,通过将QShortcut的autoRepeat属性设置为False,此行为将被禁用。第二部分工作正常,谢谢。我也有一个问题,在一个特定的延迟后重复按键,就像它不断按下和释放一样,在这个过程中激活快捷键。我应该问另一个问题,还是它与QShortcut有关?@CarlosMedina请尝试我的更新,发生的情况是,只要您按下按钮,事件仍然每隔T秒发送一次,通过将QShortcut的autoRepeat属性设置为False,此行为将被禁用。