QLineEdit python方式的大写输入

时间:2015-03-10 11:15:30

标签: python pyqt qlineedit

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

在进行了一些在线搜索后,我只看到了一些满足我需求的结果,但是所有结果都是用Qt编码的。例如,这个link

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

3 个答案:

答案 0 :(得分:6)

最简单的方法是使用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_())

答案 1 :(得分:3)

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

#minor代码编辑

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

答案 2 :(得分:0)

嘿,我知道我有点迟到了,但我希望这可以帮助像我这样花一些时间寻找其他人的其他人

<强> Mycase: 我试图只将第一个字母转换为大写,这就是我最终的结果并且它有效(只是初学者在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。