QLineEdit python 方式的大写输入

Uppercase input in QLineEdit python way

我已经使用 QT Designer 制定了一个 UI,但发现没有参数可以让我将 QLineEdit 输入设置为大写。

在网上搜索了一下,只看到了极少数符合我需要的结果,但都是用Qt编写的。例如,这个 link

那么,有没有办法让我以 pythonic 的方式做到这一点?

试试这个, 我相信这符合您的目的。我不会称它为 pythonic。更像是 PyQt 覆盖。

#次代码编辑

from PyQt4 import QtGui
import sys
#===============================================================================
# MyEditableTextBox-  
#===============================================================================
class MyEditableTextBox(QtGui.QLineEdit):
#|-----------------------------------------------------------------------------|
# Constructor  
#|-----------------------------------------------------------------------------|

    def __init__(self,*args):
        #*args to set parent
        QtGui.QLineEdit.__init__(self,*args)

#|-----------------------------------------------------------------------------|
# focusOutEvent :- 
#|-----------------------------------------------------------------------------|
    def focusOutEvent(self, *args, **kwargs):
        text = self.text()
        self.setText(text.__str__().upper())
        return QtGui.QLineEdit.focusOutEvent(self, *args, **kwargs)


#|--------------------------End of focusOutEvent--------------------------------|
#|-----------------------------------------------------------------------------| 
# keyPressEvent
#|-----------------------------------------------------------------------------|
    def keyPressEvent(self, event):
        if not self.hasSelectedText():
            pretext = self.text()
            self.setText(pretext.__str__().upper())
        return QtGui.QLineEdit.keyPressEvent(self, event)

#|--------------------End of keyPressEvent-------------------------------------|

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = QtGui.QWidget()
    lay = QtGui.QHBoxLayout()
    w.setLayout(lay)
    le1 = MyEditableTextBox()
    lay.addWidget(le1)
    le2 = MyEditableTextBox()
    lay.addWidget(le2)
    w.show()
    sys.exit(app.exec_())

最简单的方法是使用 validator.

这将立即大写用户键入或粘贴到行编辑中的任何内容:

from PyQt4 import QtCore, QtGui

class Validator(QtGui.QValidator):
    def validate(self, string, pos):
        return QtGui.QValidator.Acceptable, string.upper(), pos
        # for old code still using QString, use this instead
        # string.replace(0, string.count(), string.toUpper())
        # return QtGui.QValidator.Acceptable, pos

class Window(QtGui.QWidget):
    def __init__(self):
        super(Window, self).__init__()
        self.edit = QtGui.QLineEdit(self)
        self.validator = Validator(self)
        self.edit.setValidator(self.validator)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.edit)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 300, 100)
    window.show()
    sys.exit(app.exec_())

嘿,我知道我有点晚了,但我希望这可以帮助像我一样花了一些时间搜索这个的人

我的案例: 我试图只将第一个字母转换为大写,这就是我最终得到的结果并且它起作用了(只是 python 的初学者所以如果你能把它做得更多 pythonic 请告诉我)

在定义函数中:line_edit_object.textChanged.connect(lambda:auto_capital(line_edit_object))

函数auto_capital:

def auto_capital(line_edit_object):
    edit=line_edit_object
    text=edit.text()
    edit.text(text.title())

这将解决所有问题。随意让它更 pytonic。