Les Boutons (Partie 1)
1. Présentation
Nous allons cette fois nous intéresser à un élément essentiel d'une interface graphique : le bouton. En effet celui-ci permet à l'utilisateur d'effectuer une action grâce à un simple click de souris. GTK+ nous permet de les utiliser grâce au widget
GtkButton :
1.1 Hiérarchie
GObject ->
GtkObject ->
GtkWidget ->
GtkContainer ->
GtkBin? ->
GtkButton
2. Utilisation de base
2.1 Création d'un bouton
bouton = gtk.Button(label=None, stock=None, use_underline=True)
Si on ne passe eucun paramètre, on créé un bouton vide. Cela permet de personnaliser complètement le bouton car
GtkButton dérive de
GtkContainer. On peut donc inclure n'importe quel type de widget dans le bouton (
GtkLabel,
GtkImage, ...).
Le paramètre
label correspond au texte à afficher à l'intérieur du bouton. Comme pour le widget
GtkLabel, si un caractère accentué est utilisé, il faudra fournir une chaine de caractères unicode pour avoir un affichage correct du texte.
Il est possible de faire réagir le bouton à l'aide d'un raccourci clavier. La touche servant de raccourci est spécifiée dans le paramètre label. Il suffit de mettre "_" devant la lettre souhaitée pour que la combinaison Atl+Touche active le bouton. Pour que ceci fonctionne, le paramètre
use_underline doit être True (valeur par défaut).
Il est également possible de créer un bouton avec un label, un raccourci clavier et une image. Cependant, pour faire cela, GTK+ utilise les
GtkStockItem? qui est une structure contenant les informations sur le label et l'image à afficher. GTK+ comporte déjà beaucoup de
GtkStockItem? prédéfinis (en tout cas les plus courant). Le paramètre
stock_id est donc l'identifiant du
GtkStockItem? à utiliser.
Une fois le bouton créé, il ne reste plus qu'à l'inclure dans une fenêtre et de connecter le signal "clicked", pour qu'un clic de souris sur le bouton corresponde à une action précise.
2.2 Modifier le texte d'un bouton
A tout moment pendant l'exécution du programme, nous pouvons connaître ou modifier le texte d'un bouton à l'aide d'une de ces deux fonctions :
texte = bouton.get_label()
bouton.set_label(label)
La première méthode renvoie le texte du bouton, tandis que la deuxième modifie le texte du bouton par la valeur du paramètre
label.
2.3 Programme exemple
Pour ce chapitre, notre objectif sera de créer une application contenant un bouton qui permettra de quitter l'application.
# -*- Encoding: Latin-1 -*-
import gtk
EXEMPLE_1 = 0
EXEMPLE_2 = 1
EXEMPLE_3 = 2
def add_btn(window, iExemple):
# def add_btn(window, iExemple)
# Fonction en charge d'inserer le bouton dans la fenetre
# Parametre :
# - pWindow : fenetre parente
# - iExemple : mode de creation
# EXEMPLE_1 pour un bouton label
# EXEMPLE_2 pour un bouton EXEMPLE_1 + raccourci
# EXEMPLE_3 pour un bouton EXEMPLE_2 + image
if iExemple == EXEMPLE_3:
# Bouton avec un label, un raccourci et une image
QuitBtn = gtk.Button(stock_id=gtk.STOCK_QUIT)
window.set_title("Les boutons - Exemple 3")
elif iExemple == EXEMPLE_2:
# Bouton avec un label et un raccourci
QuitBtn = gtk.Button("_Quitter")
window.set_title("Les boutons - Exemple 2")
else:
# Bouton avec un label
QuitBtn = gtk.Button("Quitter")
window.set_title("Les boutons - Exemple 1")
# Connexion du signal "clicked" du bouton
QuitBtn.connect("clicked", gtk.main_quit, None)
# Insertion du bouton dans la fenetre
window.add(QuitBtn)
def main():
# Creation de la fenetre
window = gtk.Wwindow(gtk.WINDOW_TOPLEVEL)
window.set_default_size(320 ,200)
window.set_border_width(10)
# Connexion du signal "destroy" de la fenetre
window.connect("destroy", gtk.main_quit, None)
# Insertion du bouton
add_btn(window, EXEMPLE_1)
# Affichage de la fenetre
window.show_all()
# Demarrage de la boucle evenementielle
gtk.main()
if __name__ == '__main__':
main()