【问题标题】:PyQt QLineEdit defocus when enter key pressed按下输入键时PyQt QLineEdit散焦
【发布时间】:2019-03-03 13:18:22
【问题描述】:
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 个问题:我需要的验证器正在阻止按 Enter 键,另一个是 pressenter() 函数可能应该做一些事情,但我不知道焦点方法是什么。

【问题讨论】:

    标签: python pyqt focus qlineedit


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2014-05-06
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多