Dans le [précédent billet|/index.php?post/2013/08/05/D%C3%A9couverte-du-widget-GtkEntry-avec-Python] $$Consacré à l’élément [GtkEntry|https://developer.gnome.org/gtk3/stable/GtkEntry.html].$$ les différents éléments étaient placés dans une « [grille|https://developer.gnome.org/gtk3/stable/GtkGrid.html] », je vais opté pour l’agencement dans une « [boîte|https://developer.gnome.org/gtk3/stable/GtkBox.html] ».
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|https://developer.gnome.org/gtk3/stable/GtkComboBoxText.html] offers a simple alternative. […]
Nous allons donc commencé par celui-là.
((/news-custom/public/exemples-gtk/exemple-06.png|Exemple 06 GtkComboBoxText|C|Exemple 06 GtkComboBoxText))
Il n’y a rien de particulèrement compliqué, on initialise [Gtk.ComboBoxText()|https://developer.gnome.org/gtk3/stable/GtkComboBoxText.html], auquel on ajoute des éléments grâce à la méthode [append_text()|https://developer.gnome.org/gtk3/stable/GtkComboBoxText.html#gtk-combo-box-text-append-text] $$C’est dans la fonction @@create_rows()@@$$.
Pour récupérer un des éléments de la liste déroulante, il faut lui associé un signal, [changed|https://developer.gnome.org/gtk3/stable/GtkComboBox.html#GtkComboBox-changed] dans notre cas.
»La sélection affiche l’élément dans la console. »
((/news-custom/public/exemples-gtk/exemple-06_b.png|Affiche le résultat d’un des élément de GtkComboBoxText|C|Affiche le résultat d’un des élément de GtkComboBoxText))
Dans l’exemple suivant, on a simplement rajouter un bouton ([GtkButton|https://developer.gnome.org/gtk3/stable/GtkButton.html]) associé au signal, [clicked|https://developer.gnome.org/gtk3/stable/GtkButton.html#GtkButton-clicked].
((/news-custom/public/exemples-gtk/exemple-07.png|Exemple 07 GtkComboBoxText et GtkButton|C|Exemple 07 GtkComboBoxText et GtkButton))
Dans le troisième exemple, on va afficher une info-bulle ([GtkTooltip|https://developer.gnome.org/gtk3/stable/GtkTooltip.html]) 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()|https://developer.gnome.org/gtk3/stable/GtkComboBoxText.html#gtk-combo-box-text-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.
((/news-custom/public/exemples-gtk/exemple-08.png|Exemple 08 GtkComboBoxText, GtkButton et GtkTooltip|C|Exemple 08 GtkComboBoxText, GtkButton et GtkTooltip))
Voilà nous avons fait le tours de [GtkComboBoxText|https://developer.gnome.org/gtk3/stable/GtkComboBoxText.html], il nous reste à voir son « frère » [GtkComboBox|https://developer.gnome.org/gtk3/stable/GtkComboBox.html].
Dans un premier temps on doit définir un modèle [GtkListStore|https://developer.gnome.org/gtk3/stable/GtkListStore.html]. Ensuite la liste déroulante est définie grâce à la fonction [new_with_model()|https://developer.gnome.org/gtk3/stable/GtkComboBox.html#gtk-combo-box-new-with-model]. L’affichage de chaque élément se fait grâce à [GtkCellRendererText|https://developer.gnome.org/gtk3/stable/GtkCellRendererText.html].
Pour récupérer l’élément sélectionné, il faut utiliser la fonction [get_active()|https://developer.gnome.org/gtk3/stable/GtkComboBox.html#gtk-combo-box-get-active]. Elle nous renvoie uniquement un numéro (celui de la ligne). Comme notre modèle « s’interface » avec [GtkTreeModel|https://developer.gnome.org/gtk3/stable/GtkTreeModel.html], on peut donc utiliser ces méthodes, en particulier [get_value()|https://developer.gnome.org/gtk3/stable/GtkTreeModel.html#gtk-tree-model-get-value].
((/news-custom/public/exemples-gtk/exemple-09.png|Exemple 09 GtkComboBox et GtkButton|C|Exemple 09 GtkComboBox et GtkButton))
Dans notre dernier exemple, on affiche uniquement une info-bulle, quand rien n’est sélectionné.
((/news-custom/public/exemples-gtk/exemple-10.png|Exemple 10 GtkComboBox, GtkButton et GtkTooltip|C|Exemple 10 GtkComboBox, GtkButton et GtkTooltip))