Python 如何在pyqt5中允许tab键按下事件
假设我有一个名为Python 如何在pyqt5中允许tab键按下事件,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,假设我有一个名为按钮的QPushButton,我成功地执行了以下操作以允许单击事件: class UI(object): def setupUi(self, Dialog): # ... self.button.clicked.connect(self.do_something) def do_something(self): # Something here 我的问题是:当按下选项卡键时,如何调用do\u something(
按钮的QPushButton
,我成功地执行了以下操作以允许单击事件:
class UI(object):
def setupUi(self, Dialog):
# ...
self.button.clicked.connect(self.do_something)
def do_something(self):
# Something here
我的问题是:当按下选项卡键时,如何调用do\u something()
?例如,如果我有一个名为tb\u id
的QlineEdit,在输入一个值并按tab键后,do\u something()
方法的调用方式应与上面单击的方法相同。如何使用pyqt5
非常感谢。我假设您将小部件放在QDialog小部件中,因此如果您想要实现自己的按键事件,您应该覆盖对话框小部件的按键事件,
那它就可以随心所欲了
举个例子
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog
class UI(QDialog):
def __init__(self):
super(UI, self).__init__()
# ...
self.button.clicked.connect(self.do_something)
def do_something(self):
# Something here
def keyPressEvent(self, event):
# when press key is Tab call your function
if event.key() == Qt.Key_Tab:
self.do_something()
要获得您想要的内容,有许多方法,但在通过观察代码指向它之前,我发现您已经使用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世界中事件和信号之间的区别,因为您提到了click事件,但在Qt世界中,必须说clicked signal
现在,如果要说到这一点,有以下选项:
- 使用按键事件:
- 使用事件筛选器:
- 使用QShorcut的激活信号:
从前面的方法中,我更喜欢后者,因为您不需要覆盖任何内容,并且可以连接到多个函数
另一方面,当焦点在Qt窗口中时,仅检测到事件。对不起,使用事件筛选器+self.installEventFilter(self)
。那么?@S.Nick我不明白你的问题。
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)
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")