Python 如何允许QLineEdit检测Tab按键事件

Python 如何允许QLineEdit检测Tab按键事件,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,这篇文章是以另一种方式重新表述我的问题。我想让QlineEdit检测选项卡键按下调用名为do\u something()的方法。我从Qt设计器生成了以下pyqt5代码,其中包括名为lineEdit的QlineEdit实例。当我输入SSNnumber并按tab键时,应该调用该方法。我该怎么做 from PyQt5.QtWidgets import QApplication from PyQt5 import QtCore, QtGui, QtWidgets import sys class Ui

这篇文章是以另一种方式重新表述我的问题。我想让QlineEdit检测
选项卡键
按下调用名为
do\u something()
的方法。我从Qt设计器生成了以下
pyqt5
代码,其中包括名为
lineEdit
的QlineEdit实例。当我输入
SSN
number并按tab键时,应该调用该方法。我该怎么做

from PyQt5.QtWidgets import QApplication
from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(348, 68)
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(40, 20, 41, 16))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(80, 20, 201, 21))
        self.lineEdit.setObjectName("lineEdit")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def do_something():
        print('Success!')

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.label.setText(_translate("Dialog", "SSN"))

我在前面的回答中指出的最简单的选项是使用,您必须作为小部件传递到
QLineEdit
,并且在这种情况下必须是


我在前面的回答中指出的最简单的选项是使用,您必须作为小部件传递到
QLineEdit
,并且在这种情况下必须是


更简单地说,我成功地将QLineEdit子类化并超越其事件方法,如下所示:

class EditSpec(QLineEdit):
    def event(self,event):
        if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab:
            self.tabFollow()
            return True
        else:
            return QLineEdit.event(self,event)          
    def tabFollow(self):
        print("tab-key pressed!")

任何非tab键按下都会正常进行,而tab键按下会导致tabFollow方法触发。要添加(这一点很重要),使用keyPressEvent方法不会阻止事件通过应用程序的事件系统触发。只有以与上述类似的方式重写事件方法才能做到这一点。

更简单地说,我成功地将QLineEdit子类化并覆盖了它的事件方法,如下所示:

class EditSpec(QLineEdit):
    def event(self,event):
        if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab:
            self.tabFollow()
            return True
        else:
            return QLineEdit.event(self,event)          
    def tabFollow(self):
        print("tab-key pressed!")
任何非tab键按下都会正常进行,而tab键按下会导致tabFollow方法触发。要添加(这一点很重要),使用keyPressEvent方法不会阻止事件通过应用程序的事件系统触发。只有以与上面类似的方式重写事件方法才能做到这一点