簡體   English   中英

TAB 鍵在我的 PYQT5 和 Python 代碼中不起作用

[英]TAB key is not working in my code in PYQT5 and Python

我需要從程序中得到的是,一旦我從鍵盤上按下TAB ,就應該移動到下一個字段並執行特定的功能。

第一個字段中的函數是“ID”(數字)作為輸入從用戶那里獲取。 然后,按TAB 后應該提取特定數字,這些數字是“出生日期”。

通過“按鈕”工作正常。 但是,按tab 鍵不起作用並通過錯誤。 請看代碼和圖片。

我正在使用 PYQT5 和 Python 3.7。

表格圖片

請參閱此鏈接中的圖像:

在此處輸入圖片說明

編碼


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


非常感謝,

您提供的代碼無法執行,所以我花時間從頭開始創建它。 基本思想是通過一個eventFilter來攔截QLineEdit的事件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM