按下输入键时PyQt QLineEdit散焦

问题描述 投票:0回答:1
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()

我有简单的编辑框,当我按下回车键时,我希望我的光标退出编辑框,所以我知道我的输入已被接受。这意味着当我想再次编辑时,我特别需要再次选择编辑框。我试图搜索这个,但我不是天生的英语演讲者或者说,也许这是我的问题,但我找不到好的答案。

我目前注意到有两个问题:我需要的Validator是阻止输入按键,另一个是pressenter()函数可能应该做的事情,但我不知道使用焦点方法是什么。

python pyqt focus qlineedit
1个回答
0
投票

您可以将焦点设置到主窗口:(只有当您的输入有效时才会切换焦点,这是您想要的行为吗?)

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()
© www.soinside.com 2019 - 2024. All rights reserved.