Python 如何允许QLineEdit检测Tab按键事件
这篇文章是以另一种方式重新表述我的问题。我想让QlineEdit检测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
选项卡键
按下调用名为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方法不会阻止事件通过应用程序的事件系统触发。只有以与上面类似的方式重写事件方法才能做到这一点