#python #pyqt #focus #qlineedit
#python #pyqt #фокусировка #qlineedit
Вопрос:
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()
У меня есть простое окно редактирования, и я хочу, чтобы мой курсор выходил из окна редактирования при нажатии клавиши enter, чтобы я знал, что мой ввод был принят. Это означает, что когда я захочу отредактировать снова, мне, в частности, нужно снова выбрать поле редактирования. Я пытался найти это по всему, но я не являюсь естественным носителем английского языка или что-то еще, возможно, это моя проблема, но я не могу найти хороший ответ.
В настоящее время я замечаю 2 проблемы: валидатор, который мне нужен, предотвращает нажатие клавиши enter, другая заключается в том, что функция pressenter (), вероятно, должна что-то делать, но я не знаю, что с методами фокусировки.
Ответ №1:
Вы можете установить фокус на главное окно: (Фокус переключается только тогда, когда ваш ввод верен, вы хотите такого поведения?)
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()