Search code examples
pythonpyqtqlineedit

Uppercase input in QLineEdit python way


I had drawn up an UI using the QT Designer but found out that there are no parameters for me to set QLineEdit inputs to be uppercase.

After doing some online searching, I have only seen a very few handful of results that cater to my needs, however all are coded in Qt. Example, this link

And so, are there ways for me to do this in the pythonic way?


Solution

  • Try this, I believe this serves your purpose. I won't call it much pythonic. More like PyQt override.

    #minor code edit

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