按下回车键时PyQt QLineEdit散焦
PyQt QLineEdit defocus when enter key pressed
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter():
print ("Enter pressed")
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
editbox.setValidator(QDoubleValidator(0.99,99.99,2))
eform = QFormLayout()
eform.addRow("Enter text: ",editbox)
editbox.editingFinished.connect(pressenter)
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
我有一个简单的编辑框,我希望我的光标在我按下回车键时退出编辑框,这样我就知道我的输入被接受了。这意味着当我想再次编辑时,我特别需要再次 select 编辑框。我试着四处搜索,但我不是天生说英语的人,也许这是我的问题,但我找不到好的答案。
我目前注意到 2 个问题:我需要的验证器阻止输入键按下,另一个是 pressenter() 函数可能应该做一些事情,但我不知道焦点方法有什么用。
您可以将焦点设置到主要window:
(只有当你的输入有效时才会切换焦点,这是你想要的行为吗?)
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter(win):
win.setFocus()
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
editbox.setValidator(QDoubleValidator(0.99,99.99,2))
eform = QFormLayout()
eform.addRow("Enter text: ",editbox)
editbox.editingFinished.connect(lambda: pressenter(win))
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
您还可以在 pressenter
函数中验证并在输入未被接受时重置编辑框:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter(win, editbox):
val = QDoubleValidator(0.99,99.99,2)
if val.validate(editbox.text(),0)[0] == QValidator.Acceptable:
win.setFocus()
else:
editbox.setText('')
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
eform = QFormLayout()
eform.addRow("Enter text: ", editbox)
editbox.editingFinished.connect(lambda: pressenter(win, editbox))
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter():
print ("Enter pressed")
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
editbox.setValidator(QDoubleValidator(0.99,99.99,2))
eform = QFormLayout()
eform.addRow("Enter text: ",editbox)
editbox.editingFinished.connect(pressenter)
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
我有一个简单的编辑框,我希望我的光标在我按下回车键时退出编辑框,这样我就知道我的输入被接受了。这意味着当我想再次编辑时,我特别需要再次 select 编辑框。我试着四处搜索,但我不是天生说英语的人,也许这是我的问题,但我找不到好的答案。
我目前注意到 2 个问题:我需要的验证器阻止输入键按下,另一个是 pressenter() 函数可能应该做一些事情,但我不知道焦点方法有什么用。
您可以将焦点设置到主要window: (只有当你的输入有效时才会切换焦点,这是你想要的行为吗?)
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter(win):
win.setFocus()
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
editbox.setValidator(QDoubleValidator(0.99,99.99,2))
eform = QFormLayout()
eform.addRow("Enter text: ",editbox)
editbox.editingFinished.connect(lambda: pressenter(win))
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()
您还可以在 pressenter
函数中验证并在输入未被接受时重置编辑框:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
def pressenter(win, editbox):
val = QDoubleValidator(0.99,99.99,2)
if val.validate(editbox.text(),0)[0] == QValidator.Acceptable:
win.setFocus()
else:
editbox.setText('')
def window():
app = QApplication(sys.argv)
win = QWidget()
editbox = QLineEdit()
eform = QFormLayout()
eform.addRow("Enter text: ", editbox)
editbox.editingFinished.connect(lambda: pressenter(win, editbox))
win.setLayout(eform)
win.setWindowTitle("My Test Window")
win.show()
sys.exit(app.exec_())
if __name__ == '__main__':
window()