Приведенный ниже код создает простое диалоговое окно с одним только виджетом: QLineEdit. Ввод чего-либо в это поле вызывает метод fixText() (для textChanged), который очищает входящий строковый аргумент. После того, как строка была «очищена», метод обновляет QLineEdit с результатом.
Цель: независимо от того, что пользователь вводит в поле редактирования строки:
Первые четыре буквы всегда заглавные. Пятый символ всегда подчеркивание.
Оставшиеся символы в строке не нужно очищать, кроме того, что делает cleanupString().
Пример того, что необходимо сделать: ABCD_helloWorld
Возникла проблема: невозможно вставить символ подчеркивания без ошибок. Строки кода, отвечающие за вставку подчеркивания, в настоящее время закомментированы...
import sys, os
from PyQt4 import QtCore, QtGui
class Dialog_01(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
self.myQLineEdit = QtGui.QLineEdit("Type text here")
self.myQLineEdit.textChanged.connect(self.fixText)
myBoxLayout.addWidget(self.myQLineEdit)
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
self.setWindowTitle('Dialog 01')
def fixText(self, arg):
arg=str(arg)
if not arg: return
arg=self.cleanupString(arg)
if len(arg)<3: result=arg.upper()
else: result = arg[0:4].upper()+arg[4:]
# resultList=list(result)
# resultList.insert(4, '_')
# result=''.join(resultList)
self.myQLineEdit.blockSignals(True)
self.myQLineEdit.setText(result)
self.myQLineEdit.blockSignals(False)
def cleanupString(self, line=None):
if line==None: return
invalid = invalid = ['!','"','#','$','%','&','\\','(',')','*','+',',','-','.','/'
,':',';','<','=','>','?','@','[',"'",']','^','`','{','|','}','~', ' ']
for c in invalid:
if len(line)>0: line=line.replace(c,'_')
return line
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog_1 = Dialog_01()
dialog_1.show()
dialog_1.resize(480,320)
sys.exit(app.exec_())
ФИКСИРОВАННЫЙ КОД:
import sys, os
from PyQt4 import QtCore, QtGui
class Dialog_01(QtGui.QMainWindow):
def __init__(self):
super(QtGui.QMainWindow,self).__init__()
myQWidget = QtGui.QWidget()
myBoxLayout = QtGui.QVBoxLayout()
self.myQLineEdit = QtGui.QLineEdit("Type text here")
self.myQLineEdit.textChanged.connect(self.fixText)
myBoxLayout.addWidget(self.myQLineEdit)
myQWidget.setLayout(myBoxLayout)
self.setCentralWidget(myQWidget)
self.setWindowTitle('Dialog 01')
def fixText(self, arg):
arg=str(arg)
if not arg: return
arg=self.cleanupString(arg)
if len(arg)<=3: result=arg.upper()
else: result = arg[0:4].upper()+"_"+arg[5:]
self.myQLineEdit.blockSignals(True)
self.myQLineEdit.setText(result)
self.myQLineEdit.blockSignals(False)
def cleanupString(self, line=None):
if line==None: return
invalid = invalid = ['!','"','#','$','%','&','\\','(',')','*','+',',','-','.','/'
,':',';','<','=','>','?','@','[',"'",']','^','`','{','|','}','~', ' ']
for c in invalid:
if len(line)>0: line=line.replace(c,'_')
return line
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog_1 = Dialog_01()
dialog_1.show()
dialog_1.resize(480,320)
sys.exit(app.exec_())