1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #! /usr/bin/python
# -*- coding: utf-8 -*-
# Python 3, PyQt4
import sys
from PyQt4 import QtCore, QtGui
DATAS = ["Aanor", "Aaricia", "Aaron", "Abbon", "Abby", "Abdel", "Abdon",
"Abel", "Abélard", "Abélia", "Abella", "Abigaël", "Abondance",
"Abraham", "Acace", "Achille", "Acmé", "Ada", "Adalard",
"Adalbert", "Adalric", "Adalsinde", "Adam", "Adama", "Adélaïde",
"Adélaïs", "Adélard", "Adèle", "Adelice", "Adélie", "Adelin",
"Adelind", "Adeline", "Adelphe", "Adelphine", "Adeltrude",
"Adémar", "Adénora", "Adine", "Adolphe", "Adon", "Adonis",
"Adria", "Adrian", "Adriana", "Adriano", "Adrien", "Adrienne",
"Adriette", "Adula", "Aedhan", "Aël", "Aëla", "Aélia", "Aëlig",
"Aëlis", "Aelith", "Aëlred", "Aénor"]
#############################################################################
class LineEdit(QtGui.QLineEdit):
"""QLineEdit avec une liste de mots pour completion datas
la liste de mots sélectionnées s'affiche dans un popup
les mots sélectionnés dans datas sont ceux qui contiennent le mot frappé
"""
def __init__(self, datas, parent=None):
super(LineEdit, self).__init__(parent)
self.setFocusPolicy(QtCore.Qt.StrongFocus)
# installe le QCompleter
self.completer = QtGui.QCompleter(self)
self.completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
self.setCompleter(self.completer)
# installe le model à partir de la liste fournie datas
model = QtGui.QStandardItemModel()
for i, word in enumerate(datas):
item = QtGui.QStandardItem(word)
model.setItem(i, 0, item)
# installe le QSortFilterProxyModel qui s'insère entre le QCompleter et le model
self.proxymodel = QtGui.QSortFilterProxyModel(self)
self.proxymodel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.proxymodel.setSourceModel(model)
self.completer.setModel(self.proxymodel)
# chaque changement de texte déclenchera la filtration du model
self.textEdited.connect(self.proxymodel.setFilterFixedString)
#############################################################################
class Fenetre(QtGui.QWidget):
def __init__(self, parent=None):
super(Fenetre, self).__init__(parent)
self.lineEdit = LineEdit(DATAS, self)
posit = QtGui.QGridLayout()
posit.addWidget(self.lineEdit, 0, 0)
self.setLayout(posit)
#############################################################################
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
fen = Fenetre()
fen.setAttribute(QtCore.Qt.WA_DeleteOnClose) # pour éviter un warning à la fermeture
fen.show()
sys.exit(app.exec_()) |
Partager