Une zone de saisie avec complètement (EntryCompletion
)
est un objet associé à un champ de saisie (Entry
)
pour fournir la fonction de complètement.
Lorsque l'utilisateur entre des données dans le champ de saisie
Entry
, le EntryCompletion
fait
apparaître une fenêtre contextuelle montrant un ensemble de chaînes de caractères
correspondant au texte du champ de saisie(Entry
)
Un EntryCompletion
est créé par le constructeur :
completion = gtk.EntryCompletion()
On peut utiliser la méthode set_completion
()
du champ de saisie Entry
pour associer le
EntryCompletion
au Entry
:
entry.set_completion(completion
)
Les chaînes de caractères qu'utilise le EntryCompletion
pour la correspondance sont récupérées depuis un TreeModel
(généralement un ListStore
) qui doit être défini par la méthode :
completion.set_model(model
)
Le EntryCompletion
implémente l'interface
CellLayout
, à la manière du
TreeViewColumn
, pour gérer l'affichage des
données du TreeModel
. La méthode suivante définit
un EntryCompletion
sous la forme la plus
courante - une liste de chaînes de caractères :
completion.set_text_column(column)
Cette méthode est équivalente à :
cell = CellRendererText() completion.pack_start(cell) completion.add_attribute(cell, 'text', column)
Pour définir le nombre de caractères qui doivent être entrés avant que
le EntryCompletion
recherche une correspondance,
on peut utiliser la méthode :
completion.set_minimum_key_length(length
)
Le programme d'exemple
entrycompletion.py illustre
l'utilisation du EntryCompletion
. La
Figure 16.10, « Saisie avec complètement » montre le programme en cours
d'exécution.
Le programme d'exemple démarre avec un faible nombre de chaînes de complètement qui peut être augmenté en entrant des données dans le champ de saisie et en appuyant sur la touche Entrée. Si la chaîne est unique, elle est ajoutée à la liste des chaînes de complètement.
La fonction interne de concordance ne tient pas compte de la casse (minuscule/majuscule). Si on a besoin d'une fonction plus spécifique, il est possible d'utiliser la méthode suivante pour installer sa propre fonction de concordance :
completion.set_match_func(func
,user_data
)
La fonction func
est :
def func(completion, key_string, iter, data):
... où le paramètre key_string
contient le contenu
courant du champ Entry
, iter
est
un TreeIter
pointant sur une ligne dans le
TreeModel
associé et data
contient
les données utilisateur user_data
. Le paramètre
func
devrait renvoyer TRUE
si la
chaîne de complètement de la ligne devrait être affichée.
L'extrait de code suivant utilise une fonction de concordance pour afficher
les possibles chaînes de complètement qui commencent par le contenu du champ
de saisie et qui possèdent le suffixe indiqué (ici, un nom se terminant par
.png
pour un fichier PNG
file.
... completion.set_match_func(end_match, (0, '.png')) ... def end_match(completion, entrystr, iter, data): column, suffix = data model = completion.get_model() modelstr = model[iter][column] return modelstr.startswith(entrystr) and modelstr.endswith(suffix) ...
Par exemple, si l'utilisateur tape 'mou' et que le modèle de complètement contient une chaîne comme 'moulin.png', 'farine.png', 'moule.png' et 'mou.tif', les choix 'moulin.png' et moule.png' seront proposés comme complètement.