Чтобы получить то, что вы хотите, есть много методов, но прежде чем указывать на это, наблюдая за вашим кодом, я вижу, что вы сгенерировали его с помощью Qt Designer, так что код не должен быть изменен, но создайте другой класс, который использует этот код, чтобы я поместилбазовый код:
from PyQt5 import QtCore, QtWidgets
class UI(object):
def setupUi(self, Dialog):
self.button = QtWidgets.QPushButton("Press Me")
lay = QtWidgets.QVBoxLayout(Dialog)
lay.addWidget(self.button)
class Dialog(QtWidgets.QDialog, UI):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.button.clicked.connect(self.do_something)
@QtCore.pyqtSlot()
def do_something(self):
print("do_something")
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Dialog()
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
Также я рекомендую вам прочитать разницу между событием и сигналом в мире Qt в Каковы различия между событием и сигналом в Qt , поскольку вы говорите о событие клика но в мире Qt нужно сказать сигнал щелчка .
Теперь, если идти к точке, есть следующие опции:
- Использование keyPressEvent:
class Dialog(QtWidgets.QDialog, UI):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.button.clicked.connect(self.do_something)
@QtCore.pyqtSlot()
def do_something(self):
print("do_something")
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Tab:
self.do_something()
- Использование фильтра событий:
class Dialog(QtWidgets.QDialog, UI):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.button.clicked.connect(self.do_something)
@QtCore.pyqtSlot()
def do_something(self):
print("do_something")
def eventFilter(self, obj, event):
if obj is self and event.type() == QtCore.QEvent.KeyPress:
if event.key() == QtCore.Qt.Key_Tab:
self.do_something()
return super(Dialog, self).eventFilter(obj, event)
- Использование активированного сигналаQShorcut:
class Dialog(QtWidgets.QDialog, UI):
def __init__(self, parent=None):
super(Dialog, self).__init__(parent)
self.setupUi(self)
self.button.clicked.connect(self.do_something)
shortcut = QtWidgets.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Tab), self)
shortcut.activated.connect(self.do_something)
@QtCore.pyqtSlot()
def do_something(self):
print("do_something")
Из предыдущих методов я предпочитаю последний, потому что вам не нужно ничего перезаписывать, и вы можете подключиться к нескольким функциям.
НаС другой стороны, только событияобнаруживаются, когда фокус находится в окне Qt.