Aperçu du widget, GtkComboBox
Par olivier le lundi 12 août 2013, 13:59 - Programmation - Lien permanent
Nous continuons notre série de billets consacrés aux principaux widgets sous Gtk.
Cette fois-ci, il s'agit de GtkComboBox, cet élément permet de créer une liste déroulante.
Dans le précédent billet [1] les différents éléments étaient placés dans une « grille », je vais opté pour l'agencement dans une « boîte ».
Si l'on lit la description consacré à ce widget, on constate qu'il en existe un autre.
[...]
For a simple list of textual choices, the model-view API of GtkComboBox can be a bit overwhelming. In this case, GtkComboBoxText offers a simple alternative. [...]
Nous allons donc commencé par celui-là.
Il n'y a rien de particulèrement compliqué, on initialise Gtk.ComboBoxText(), auquel on ajoute des éléments grâce à la méthode append_text() [2].
Pour récupérer un des éléments de la liste déroulante, il faut lui associé un signal, changed dans notre cas.
La sélection affiche l'élément dans la console.
Dans l'exemple suivant, on a simplement rajouter un bouton (GtkButton) associé au signal, clicked.
Dans le troisième exemple, on va afficher une info-bulle (GtkTooltip) quand rien n'est sélectionné (et uniquement dans ce cas).
L'affichage du texte dans la console, se fait grâce à la fonction get_active_text(). Elle renvoie None
si rien n'est sélectionné, donc on peut jouer sur cette condition pour afficher ou non l'info-bulle.
Voilà nous avons fait le tours de GtkComboBoxText, il nous reste à voir son « frère » GtkComboBox.
Dans un premier temps on doit définir un modèle GtkListStore. Ensuite la liste déroulante est définie grâce à la fonction new_with_model(). L'affichage de chaque élément se fait grâce à GtkCellRendererText.
Pour récupérer l'élément sélectionné, il faut utiliser la fonction get_active(). Elle nous renvoie uniquement un numéro (celui de la ligne). Comme notre modèle « s'interface » avec GtkTreeModel, on peut donc utiliser ces méthodes, en particulier get_value().
Dans notre dernier exemple, on affiche uniquement une info-bulle, quand rien n'est sélectionné.