18. 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 leur style, espacement, taille, etc.
La méthode :
widget.activate
(
)
entraîne 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.
18-1. 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é.
18-2. 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.
18-3. 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)
18-4. 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 chaîne 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.
18-5. 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.