Python:如何在PyQ中控制Lineedit输入和输出

2024-06-28 10:59:31 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码创建了一个简单的对话框窗口,其中只有widget:QLineEdit。 在该字段中键入任何内容都会触发fixText()方法(在textChanged上),该方法清除传入的字符串参数。在字符串被“清理”之后,该方法使用结果更新QLineEdit。在

目标:不管用户在lineedit字段中输入了什么:

前四个字母总是大写。 第五个字符总是下划线。在

除了cleanupString()的作用外,字符串中剩余的字符不必被清除。在

需要实现的目标示例:zhou 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_())

固定代码:

^{pr2}$

Tags: 方法字符串代码selfifsyslinearg
1条回答
网友
1楼 · 发布于 2024-06-28 10:59:31

你可以这样做:

    if len(arg)<=3: result=arg.upper()
    else: result = arg[0:4].upper()+"_"+arg[5:]

虽然,你不能用退格删除…你必须选择文本来删除它。在

相关问题 更多 >