我如何在PyQT中自动更改所有行编辑之间的焦点?

问题描述 投票:0回答:1

我在程序中有一个简单的加密代码生成器。当用户输入第一个数字时,我希望焦点自动更改为下一个行编辑器(请参阅随附的屏幕截图)。我找不到任何明显的方法可以做到这一点。我是PyQT的新手,所以我想知道是否有人知道这怎么可能?

谢谢

“我的对话框的屏幕截图”

python pyqt
1个回答
0
投票

您在这里:

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QLabel, QLineEdit
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtCore import QSize    


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(320, 240))    
        self.setWindowTitle("Keyword") 
        self.anchor = []

        # Line Edit 1
        self.nameLabel = QLabel(self)
        self.nameLabel.setText('#1')
        self.line1 = QLineEdit(self)
        self.line1.move(80, 20)
        self.line1.resize(200, 32)
        self.nameLabel.move(20, 20)
        self.anchor.append(self.line1)

        # Line Edit 2
        self.nameLabel2 = QLabel(self)
        self.nameLabel2.setText('#2')
        self.line2 = QLineEdit(self)
        self.line2.move(80, 60)
        self.line2.resize(200, 32)
        self.nameLabel2.move(20, 60)
        self.anchor.append(self.line2)

        # Line Edit 3
        self.nameLabel3 = QLabel(self)
        self.nameLabel3.setText('#3')
        self.line3 = QLineEdit(self)
        self.line3.move(80, 100)
        self.line3.resize(200, 32)
        self.nameLabel3.move(20, 100)
        self.anchor.append(self.line3)

        # Line Edit 4
        self.nameLabel4 = QLabel(self)
        self.nameLabel4.setText('#4')
        self.line4 = QLineEdit(self)
        self.line4.move(80, 140)
        self.line4.resize(200, 32)
        self.nameLabel4.move(20, 140)
        self.anchor.append(self.line4)

        # Button
        pybutton = QPushButton('OK', self)
        pybutton.clicked.connect(self.clickMethod)
        pybutton.resize(200,32)
        pybutton.move(80, 200)        

        # Connect
        self.line1.textEdited.connect(lambda state, x=1: self.checkDigit(x))
        self.line2.textEdited.connect(lambda state, x=2: self.checkDigit(x))
        self.line3.textEdited.connect(lambda state, x=3: self.checkDigit(x))
        self.line4.textEdited.connect(lambda state, x=4: self.checkDigit(x))

    def checkDigit(self, data):
        try:
            if (int(self.anchor[data-1].text()) < 10):
                self.anchor[data].setFocus()
        except:
            pass

    def clickMethod(self):
        print("Your four digits are:" + 
              " " + self.line1.text() + 
              " " + self.line2.text() +
              " " + self.line3.text() +
              " " + self.line4.text())

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit( app.exec_() )
© www.soinside.com 2019 - 2024. All rights reserved.