Клавиша TAB не работает в моем коде в PYQT5 и Python - PullRequest
1 голос
/ 06 апреля 2019

Что мне нужно от программы, так это то, что после того, как я нажму TAB на клавиатуре, я должен перейти к следующему полю и выполнить определенную функцию.

Функция в первом поле «ID» (цифры) берется от пользователя в качестве ввода. Затем, после того как я нажму TAB должен извлечь конкретные цифры, эти цифры являются «Дата рождения».

По «кнопке» работает нормально. Однако клавиша Tab не работает и из-за ошибок. Пожалуйста, смотрите код и изображение.

Я использую PYQT5 и Python 3.7.

Форма изображения

Смотрите изображение для этой ссылки:

enter image description here

код


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_())


Большое спасибо,

1 Ответ

1 голос
/ 06 апреля 2019

Код, который вы предоставляете, не может быть выполнен, поэтому я потратил время на его создание с нуля. Основная идея состоит в том, чтобы перехватывать события QLineEdit через 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_())
...