PySide QLineEdit多次自动补全功能

21 篇文章 0 订阅
13 篇文章 1 订阅
#-*- 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_())

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值