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

PySide QLineEdit多次自动补全功能_json