PySide QLineEdit多次自动补全功能

版权声明:zhaojanc https://blog.csdn.net/qq_38641985/article/details/83310850
#-*- coding:utf-8 -*-
from  PySide.QtGui  import *
from  PySide.QtCore  import *
import math
import sys
import re
import os
import json,time
import shutil
reload(sys)
sys.setdefaultencoding("utf-8")

class AutoCompleteEdit(QLineEdit):
    def __init__(self, model, separator=' ', addSpaceAfterCompleting=True):
        super(AutoCompleteEdit, self).__init__()
        self._separator = separator
        self._addSpaceAfterCompleting = addSpaceAfterCompleting
        self._completer = QCompleter(model)
        self._completer.setWidget(self)
        self.connect(
            self._completer,
            SIGNAL('activated(QString)'),
            self._insertCompletion)
        self._keysToIgnore = [Qt.Key_Enter,
                              Qt.Key_Return,
                              Qt.Key_Escape,
                              Qt.Key_Tab]

    def _insertCompletion(self, completion):

        extra = len(completion) - len(self._completer.completionPrefix())
        extra_text = completion[-extra:]
        if self._addSpaceAfterCompleting:
            extra_text += ', '
        self.setText(self.text() + extra_text)

    def textUnderCursor(self):
        text = self.text()
        textUnderCursor = ''
        i = self.cursorPosition() - 1
        while i >= 0 and text[i] != self._separator:
            textUnderCursor = text[i] + textUnderCursor
            i -= 1
        return textUnderCursor

    def keyPressEvent(self, event):
        if self._completer.popup().isVisible():
            if event.key() in self._keysToIgnore:
                event.ignore()
                return
        super(AutoCompleteEdit, self).keyPressEvent(event)
        completionPrefix = self.textUnderCursor()
        if completionPrefix != self._completer.completionPrefix():
            self._updateCompleterPopupItems(completionPrefix)
        if len(event.text()) > 0 and len(completionPrefix) > 0:
            self._completer.complete()
        if len(completionPrefix) == 0:
            self._completer.popup().hide()

    def _updateCompleterPopupItems(self, completionPrefix):

        self._completer.setCompletionPrefix(completionPrefix)
        self._completer.popup().setCurrentIndex(
            self._completer.completionModel().index(0, 0))
class ManageSubmit(QDialog):
    def __init__(self, parent=None):
        super(ManageSubmit, self).__init__(parent)
        self.initUI()
        self.setWindowTitle(u"test界面")
    def initUI(self):
        #姓名
        name_label=QLabel(u"姓名:")
        self.name=QLineEdit(u"******")
        
        #职工号
        num_label=QLabel(u"职工号:")
        self.num= QLineEdit("960521")

        
        #使用软件
        pro_soft_label=QLabel("Software")
        self.pro_soft_label=QComboBox()
        self.pro_soft_label.addItem("mysoft")
        #对应json

       
            
        #项目
        pro_label=QLabel("Project")

        values = ['book', 'good', 'perfect', 'lousy', 'messy','fety']
        self.pro_label=AutoCompleteEdit(values)
        
        #工具
        tool_label=QLabel("Tool")
        self.tool_label=QComboBox()
        self.tool_label.addItem("mytool")


        
        leftLayout=QGridLayout()
        leftLayout.addWidget(name_label,0,0)
        leftLayout.addWidget(self.name,0,1)
        leftLayout.addWidget(num_label,1,0)
        leftLayout.addWidget(self.num,1,1)
        
        leftLayout.addWidget(pro_soft_label,2,0)
        
        leftLayout.addWidget(self.pro_soft_label,2,1)
              
        leftLayout.addWidget(pro_label,3,0)
        leftLayout.addWidget(self.pro_label,3,1)
    
        leftLayout.addWidget(tool_label,4,0)
        leftLayout.addWidget(self.tool_label,4,1)
    
        leftLayout.setColumnStretch(0,1)
        leftLayout.setColumnStretch(1,3)

        self.setLayout(leftLayout)


  
if __name__ == '__main__': 
    app = QApplication(sys.argv)
    dialog = ManageSubmit()   
    dialog.show()
    sys.exit(app.exec_())

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38641985/article/details/83310850