如何在 PyQT 中的所有行编辑之间自动更改焦点?
Posted
技术标签:
【中文标题】如何在 PyQT 中的所有行编辑之间自动更改焦点?【英文标题】:How do I automatically change focus between all the line edits in PyQT? 【发布时间】:2020-03-14 20:37:19 【问题描述】:我在一个程序中有一个简单的加密代码生成器。 当用户输入第一个数字时,我希望焦点自动切换到下一行编辑器(见附件截图)。我找不到任何明显的方法可以做到这一点。 我是 PyQT 的新手,所以我想知道是否有人知道这怎么可能?
谢谢
【问题讨论】:
您的描述令人困惑。我什么时候输入数字或数字?数字是0、1、2、3、4、5、6、7、8、9等,数字是数字的组合。 我猜你需要在 QLineEdit 上使用 setFocus()。如果您上传您的代码,我可能会指导您找到解决方案。也许这个答案也可能对您有所帮助。 ***.com/questions/49418905/… @NicholasTJ 类似于self.le1.textEdited.connect(self.le2.setFocus)
的行编辑1、2、3?
@Guimute Yes :) 这就是我的想法,干杯!
@eyllanesc 为混乱道歉。用户将输入一个数字 (0-9),然后它将滚动到下一行编辑器。
【参考方案1】:
给你:
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_() )
【讨论】:
以上是关于如何在 PyQT 中的所有行编辑之间自动更改焦点?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt5 - 使用 Line Edit 从编辑窗口更新标签