PyQt QLineEdit расфокусировать при нажатии клавиши ввода - PullRequest
0 голосов
/ 03 марта 2019
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()

У меня есть простое поле редактирования, и я хочу, чтобы мой курсор выходил из поля редактирования, когда я нажимаю клавишу ввода, чтобы я знал, что мой ввод принят.Это означает, что когда я хочу снова редактировать, мне нужно снова выбрать поле редактирования.Я попытался обыскать это, но я не являюсь носителем английского языка или что-то в этом роде, возможно, это моя проблема, но я не могу найти хороший ответ.

В настоящее время я замечаю 2 проблемы: Validator, который мне нужен, не позволяет войтинажатие клавиши, еще одна причина в том, что функция pressenter (), вероятно, должна что-то делать, но я не знаю, что с методами фокусировки.

1 Ответ

0 голосов
/ 03 марта 2019

Вы можете установить фокус на главное окно: (Фокус переключается только тогда, когда ваш ввод действителен, это поведение, которое вы хотите?)

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()
...