XVIII. Chapitre 18. Définir les attributs des widgets▲
Ce chapitre décrit les méthodes utilisées pour agir sur les widgets (et les objets) et modifier leurs style, espacement, taille, etc.
La méthode :
widget.activate
(
)
entraine l"émission du signal "activate" par le widget.
La méthode :
widget.set_sensitive
(
sensible)
définit la sensibilité d'un widget (par exemple, doit-il réagir à un événement ?). Si le paramètre sensible vaut TRUE, le widget recevra les événements ; si le paramètre vaut FALSE, le widget ne recevra pas les événements. Un widget insensible est normalement affiché en "grisé".
La méthode :
widget.set_size_request
(
largeur, hauteur)
définit la taille du widget à la hauteur et largeur donnée.
XVIII-A. Méthodes des drapeaux des widgets▲
Les méthodes :
2.
3.
4.
5.
widget.set_flags
(
drapeaux)
widget.unset_flags
(
drapeaux)
drapeaux =
widget.flags
(
)
définissent, annulent et récupèrent les drapeaux des gtk.Object et des gtk.Widget. Le paramètre drapeaux peut être n'importe lequel parmi les drapeaux standards :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
IN_DESTRUCTION # en cours de destruction
FLOATING # flottant orphelin
RESERVED_1 # réservé
RESERVED_2 # réservé
TOPLEVEL # de niveau supérieur (sans parent)
NO_WINDOW # sans fenêtre propre
REALIZED # réalisé
MAPPED # peut être affiché
VISIBLE # visible
SENSITIVE # sensible
PARENT_SENSITIVE # parent est sensible
CAN_FOCUS # peut recevoir le focus
HAS_FOCUS # a le focus
CAN_DEFAULT # peut être le choix par défaut
HAS_DEFAULT # est le choix par défaut
HAS_GRAB # a la priorité
RC_STYLE # style via le RC
COMPOSITE_CHILD # enfant composite
NO_REPARENT # non utilisé
APP_PAINTABLE # directement dessinable ?
RECEIVES_DEFAULT # reçoit le choix par défaut
DOUBLE_BUFFERED # possède un double buffer
La méthode :
widget.grab_focus
(
)
permet à un widget d'acquérir le focus si son drapeau CAN_FOCUS est activé.
XVIII-B. Méthodes d'affichage des widgets▲
Les méthodes :
2.
3.
4.
5.
6.
7.
8.
widget.show
(
)
widget.show_all
(
)
widget.hide
(
)
widget.hide_all
(
)
widget.realize
(
)
widget.unrealize
(
)
widget.map(
)
widget.unmap
(
)
gèrent l'affichage du widget.
La méthode show() permet l'affichage du widget en utilisant les méthodes realize() et map().
La méthode hide() permet de ne plus afficher le widget et de le "démapper", si nécessaire, avec la méthode unmap().
Les méthodes show_all() et hide_all() permettent d'afficher ou de cacher un widget et tous ses enfants.
La méthode realize() permet de réserver des ressources pour un widget, y compris pour sa propre fenêtre.
La méthode unrealize() libère la fenêtre du widget et des autres ressources qui lui sont associées. Elle a aussi pour effet de cacher et "démapper" le widget.
La méthode map() permet de réserver de l'espace pour le widget sur l'écran. Ceci s'applique seulement aux widgets qui doivent être gérés par le gestionnaire de fenêtre. Mapper un widget permet aussi de le "réaliser" si cela est nécessaire.
La méthode unmap() retire un widget de l'affichage et peut aussi le cacher si nécessaire.
XVIII-C. Accélérateurs pour les widgets▲
Les méthodes suivantes :
2.
3.
widget.add_accelerator
(
accel_signal, accel_group, accel_key, accel_mods, accel_flags)
widget.remove_accelerator
(
accel_group, accel_key, accel_mods)
ajoutent et suppriment des accélérateurs d'un groupe gtk.AcceleratorGroup qui doit être rattaché au widget de niveau supérieur pour gérer les accélérateurs.
Le paramètre accel_signal est un signal que le widget est en droit d'émettre.
Le paramètre accel_key est la touche du clavier à utiliser comme raccourci.
Le paramètre accel_mods est un groupe de modificateurs pouvant être associés à la touche de clavier (par exemple, Shift, Control, etc.) :
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SHIFT_MASK
LOCK_MASK
CONTROL_MASK
MOD1_MASK
MOD2_MASK
MOD3_MASK
MOD4_MASK
MOD5_MASK
BUTTON1_MASK
BUTTON2_MASK
BUTTON3_MASK
BUTTON4_MASK
BUTTON5_MASK
RELEASE_MASK
Le paramètre accel_flags définit la manière dont les informations au sujet de l'accélérateur sont affichées. Les valeurs possibles sont :
2.
3.
ACCEL_VISIBLE # montre le raccourci-clavier dans l'affichage du widget
ACCEL_LOCKED # n'autorise pas la modification de l'affichage de l'accélérateur
Un groupe d'accélérateur est créé par la fonction :
accel_group =
gtk.AccelGroup
(
)
Le paramètre accel_group est lié au widget de niveau supérieur par la fonction :
window.add_accel_group
(
accel_group)
Un exemple d'ajout d'accélérateur :
menu_item.add_accelerator
(
"activate"
, accel_group,
ord(
'Q'
), gtk.gdk.CONTROL_MASK, gtk.ACCEL_VISIBLE)
XVIII-D. Méthodes de nom des widgets▲
Les méthodes suivantes définissent et récupèrent le nom d'un widget :
2.
3.
widget.set_name
(
name)
nom =
widget.get_name
(
)
Le paramètre name est une chaine de caractères qui doit être associée au widget. Ceci est utile pour préciser des styles devant être utilisés avec des widgets particuliers dans une application. Au lieu d'utiliser la classe du widget, son nom peut être utilisé pour limiter l'application du style.
XVIII-E. Style des widgets▲
Les méthodes suivantes définissent et récupèrent le style associé à un widget :
2.
3.
widget.set_style
(
style)
style =
widget.get_style
(
)
La fonction :
style =
get_default_style
(
)
récupère le style par défaut.
Un style contient les informations graphiques dont a besoin un widget pour s'afficher dans les cinq états possibles :
2.
3.
4.
5.
STATE_NORMAL # état pendant les opérations normales.
STATE_ACTIVE # le widget est actif, (ex. : un bouton pressé).
STATE_PRELIGHT # le pointeur de la souris est au-dessus du widget.
STATE_SELECTED # le widget est sélectionné.
STATE_INSENSITIVE # le widget est insensible.
Un style comprend les attributs suivants :
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.
fg # une liste de 5 couleurs de premier plan - une pour chaque état
bg # une liste de 5 couleurs de fond
light # une liste de 5 couleurs - créées dans la méthode set_style()
dark # une liste de 5 couleurs - créées dans la méthode set_style()
mid # une liste de 5 couleurs - créées dans la méthode set_style()
text # une liste de 5 couleurs
base # une liste de 5 couleurs
text_aa # une liste de 5 couleurs intermédiaire entre text/base
black # la couleur noire
white # la couleur blanche
font_desc # la description de police pango par défaut
xthickness #
ythickness #
fg_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
bg_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
light_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
dark_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
mid_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
text_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
base_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
black_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
white_gc # une liste de 5 contextes graphiques - créés dans la méthode set_style()
bg_pixmap # une liste de 5 GdkPixmaps
Chaque attribut peut être défini directement, par exemple style.black et style.fg_gc[gtk.STATE_NORMAL]. Tous les attributs sont en lecture seule exceptés style.black, style.white, style.black_gc et style.white_gc.
Un style existant peut être recopié pour être modifié ensuite par la méthode :
nouveau_style =
style.copy
(
)
qui copie les attributs de style à l'exception des listes de contexte graphique et des listes de couleurs light, dark et mid (clair, foncé et médian).
Le style actuel d'un widget peut être connu par :
style =
widget.get_style
(
)
Pour modifier le style d'un widget (par exemple, sa couleur de premier plan), il faut utiliser la méthode :
2.
3.
4.
5.
6.
widget.modify_fg
(
etat, couleur)
widget.modify_bg
(
etat, couleur)
widget.modify_text
(
etat, couleur)
widget.modify_base
(
etat, couleur)
widget.modify_font
(
font_desc)
widget.set_style
(
style)
En définissant le paramètre style, on crée le contexte graphique et on alloue les couleurs. La plupart des widgets se redessinent automatiquement lorsque le style a été modifié. Si le paramètre style vaut None, le widget reviendra à son apparence par défaut.
Un widget n'est pas affecté par tous les changements de style. Par exemple, modifier la couleur de fond d'une étiquette (Label) ne changera pas la couleur de fond affichée, car le widget Label ne possède pas son propre gtk.gdk.Window. L'arrière-plan de l'étiquette dépend de la couleur de fond de son parent. Utiliser un EventBox pour contenir l'étiquette (Label) permet de définir sa couleur de fond. Se reporter à la section 10.1, “The EventBox”La boîte à évènement (EventBox) pour voir un exemple.