将光标移动到第一个输入框pyqt5



我有一个使用不同数量输入框的布局。

在返回按键事件中,我从所有输入框中获取值并重置值。之后,光标仅位于最后一个输入框处。如何将光标移动到第一个输入框。

在这里使用了网络上的其他示例。

from PyQt5.QtGui import QIntValidator,QDoubleValidator,QFont
from PyQt5.QtCore import Qt
import sys
class lineEditDemo(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.e1 = QLineEdit()
self.e1.setValidator(QIntValidator())
self.e1.setMaxLength(4)
self.e1.setAlignment(Qt.AlignRight)
self.e1.setFont(QFont("Arial",20))
self.e2 = QLineEdit()
self.e2.setValidator(QDoubleValidator(0.99,99.99,3))
self.e3 = QLineEdit()
self.e3.setInputMask("+99_9999_999999")
self.e4 = QLineEdit()
self.e4.textChanged.connect(self.textchanged)
self.e5 = QLineEdit()
self.e5.setEchoMode(QLineEdit.Password)
self.e6 = QLineEdit("Hello PyQt5")
self.e6.setReadOnly(True)
self.e5.editingFinished.connect(self.enterPress)
self.flo = QFormLayout()
self.flo.addRow("integer validator",self.e1)
self.flo.addRow("Double validator",self.e2)
self.flo.addRow("Input Mask",self.e3)
self.flo.addRow("Text changed",self.e4)
self.flo.addRow("Password",self.e5)
self.flo.addRow("Read Only",self.e6)
self.setLayout(self.flo)
self.setWindowTitle("QLineEdit Example")
def textchanged(self,text):
print("Changed: " + text)
def enterPress(self):
print("Enter pressed")
def keyPressEvent(self, e):
if e.key() in [Qt.Key_Return, Qt.Key_Enter]:
self.e1.clear()
self.e2.clear()
self.e3.clear()
self.e4.clear()
self.e5.clear()


if __name__ == "__main__":
app = QApplication(sys.argv)
win = lineEditDemo()
win.show()
sys.exit(app.exec_())```
When return key is pressed the cursor is at password feild. I want it to be at integer validator.
Image for clarification
[after entering the values][1]
After enter key pressed password is highlighted 
[after return key pressed][2]

[1]: https://i.stack.imgur.com/bAvNn.png
[2]: https://i.stack.imgur.com/GN9WX.png

e1.setFocus()将关注e1,这正是您想要的。

另一种方法是self.focusNextChild(),如果您的当前光标位于最后一行Edit,它将为您的第一个条目提供焦点(换句话说,只有当焦点已经在最后一行时,此方法才会将焦点提供给第一行Edit(。

请注意:如果按下返回键时当前光标不在最后一行编辑处,则focusNextChild方法将聚焦下一行编辑,而不是第一行编辑。

最新更新