简体   繁体   中英

TAB key is not working in my code in PYQT5 and Python

What I need from the program is, once I press the TAB from the keyboard, should move to the next field and execute specific function.

The function in the first field is 'ID'(digits) is taken from the user as input. Then, after I press the TAB should extract specific digits, these digits are the 'Birth-date'.

By the 'push-button' is working fine. However, by the tab key is not working and through errors. Please see the code and the image.

I am using PYQT5 and Python 3.7.

Form image

See the for image in this link:

在此处输入图片说明

The code


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(282, 130, 181, 41))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(216, 140, 51, 20)) 

        self.Handel_Buttons()
        self.keyPressEvent()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "ID"))
        self.label_2.setText(_translate("MainWindow", "D.O.B"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))



    def Handel_Buttons(self):
        self.pushButton.clicked.connect(self.ID)

    def keyPressEvent(self):
        print('HI')
        if QtCore.Qt.Key_Tab:
            self.ID()

    def ID(self):
         number = self.lineEdit.text()
         #number = '279121100762'
        #print(int(number[5]))
         digit = int(number[5])
         digit1 = int(number[6])
         digit2 = int(number[3])
         digit3 = int(number[4])
         digit4 = int(number[1])
         digit5 = int(number[2])
        #self.textBrowser.append(str[digit,digit1])

         self.textBrowser.append ('%d%d/%d%d/19%d%d' % (digit, digit1,digit2,digit3,digit4,digit5))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())


Many thanks,

The code you provide can not be executed so I take the time to create it from scratch. The basic idea is to intercept the events of the QLineEdit through an eventFilter:

from PyQt5 import QtCore, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.id_le = QtWidgets.QLineEdit("279121100762")
        self.id_le.installEventFilter(self)
        self.dob_le = QtWidgets.QLineEdit()
        btn = QtWidgets.QPushButton(
            text="Press me",
            clicked=self.conversion
        )
        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        lay = QtWidgets.QFormLayout(central_widget)
        lay.addRow("ID", self.id_le)
        lay.addRow("D.O.B", self.dob_le)
        lay.addRow(btn)

    def eventFilter(self, obj, event):
        if self.id_le == obj and event.type() == QtCore.QEvent.KeyPress:
            if event.key() == QtCore.Qt.Key_Tab:
                QtCore.QTimer.singleShot(0, self.conversion)
        return super(MainWindow, self).eventFilter(obj, event)

    def conversion(self):
        id_value = self.id_le.text()
        if len(id_value) > 7:
            text = id_value[1:7]
            dt = QtCore.QDateTime.fromString(text, "yyddMM")
            if dt.isValid():
                self.dob_le.setText(dt.toString("dd/MM/yyyy"))
                return
        print("Invalid conversion")

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM