IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Apprendre à utiliser le module Python PyGTK 2.0


précédentsommairesuivant

XXIII. Chapitre 23. Les fichiers de style rc GTK

GTK+ possède sa propre manière de traiter avec les paramètres par défaut des applications, en utilisant des fichiers rc. Ceux-ci peuvent servir pour définir les couleurs de n'importe quel widget, ils peuvent aussi, pour quelques widgets, servir à définir un arrière-plan avec un pixmap en mosaïque.

XXIII-A. Les fonctions pour le fichier rc

Au début de l'application, il faut inclure un appel à :

 
Sélectionnez
  rc_parse(nom_du_fichier)

Le paramètre nom_du_fichier correspond au fichier rc. Ceci force GTK+ à analyser ce fichier et à utiliser les styles définis pour les types de widgets qui y sont décrits.

Si l'on souhaite avoir un ensemble spécifique de widgets possédant un style différent des autres ou réaliser un quelconque groupement particulier de widgets, il faut utiliser :

 
Sélectionnez
  widget.set_name(nom)

Le nom choisi sera assigné au nouveau widget créé. Ceci permet de modifier les attributs de ce widget dans le fichier rc en utilisant son nom.

Si l'on utilise un appel comme celui-ci :

 
Sélectionnez
1.
2.
3.
  button = gtk.Button("Special Button")

  button.set_name("special button")

alors ce bouton button reçoit le nom "special button" et on peut y faire référence dans le fichier rc par le nom "special button.GtkButton". [--- Vérifiez-le !]

La Section 23.3, « Exemple de fichier rc »Exemple de fichier rc ci-dessous définit les propriétés de la fenêtre principale, tous les enfants de cette fenêtre héritent du style décrit par le style "bouton principal". Voici le code utilisé :

 
Sélectionnez
1.
2.
3.
  window = gtk.Window(gtk.WINDOW_TOPLEVEL)

  window.set_name("main window")

et le style est défini, dans le fichier rc, par :

 
Sélectionnez
  widget "main window.*GtkButton*" style "main_button"

qui applique à tous les widgets Button (voir le Chapitre 6, Les boutonsChapitre 6. Les boutons) de la fenêtre principale "main window" le style "main_buttons" tel qu'il est défini dans le fichier rc.

Ainsi qu'on peut le constater, c'est un système assez souple et puissant. Utilisez votre imagination pour en profiter au maximum.

XXIII-B. Format du fichier rc GTK

Le format du fichier rc GTK+ est illustré dans la Section 23.3, « Exemple de fichier rc »Exemple de fichier rc ci-dessous. C'est le fichier testgtkrc de la distribution GTK+, avec quelques commentaires et ajouts. Il est possible d'ajouter cette explication dans son application pour permettre à l'utilisateur de parfaire ses réglages.

Plusieurs commandes permettent de modifier les attributs d'un widget.

  • fg - Définit la couleur de premier plan d'un widget.
  • bg - Définit la couleur d'arrière-plan d'un widget.
  • bg_pixmap - Compose l'arrière-plan d'un widget avec un pixmap en mosaïque.
  • font - Définit la police utilisée pour le widget indiqué.
  • De plus, un widget possède plusieurs états, il est possible de définir différentes couleurs, mosaïques de pixmap et polices pour chaque état. Ces états sont les suivants :

NORMAL

L'état normal d'un widget, la souris n'est pas au-dessus, il n'est pas enfoncé, etc.

PRELIGHT

Lorsque le widget est survolé par la souris, les couleurs définies pour cet état seront utilisées.

ACTIVE

Lorsque le widget est cliqué ou enfoncé, il devient actif et les attributs définis pour cet état seront utilisés.

INSENSITIVE

Lorsqu'un widget est marqué "insensible", et ne peut être activé, il prendra ces attributs

SELECTED

Quand un objet est sélectionné, il prend ces attributs.

Quand on utilise les mots-clé "fg" et "bg" pour définir les couleurs des widgets, il faut respecter ce format :

 
Sélectionnez
  fg[<STATE>] = { Rouge, Vert, Bleu }

STATE est un des états ci-dessus (PRELIGHT, ACTIVE, etc.), Rouge, Vert et Bleu sont des valeurs dans l'intervalle 0 - 1.0 ; {1.0,1.0,1.0} est le blanc. Elles doivent être au format décimal, sinon leur valeur est mise à 0, ainsi un simple "1" n'est pas correct, ce doit être "1.0". Un simple "0" fonctionne parce que les valeurs non reconnues sont mises à 0.

Le paramètre bg_pixmap est très semblable au précédent, mais les couleurs sont remplacées par un nom de fichier.

pixmap_path est une liste de chemins séparés par un ":". Ces chemins sont ceux où seront recherchés les pixmaps indiqués.

La commande "font" est simple :

 
Sélectionnez
  font = "<font name>"

La partie la plus difficile est de trouver le contenu de la chaine font. Utiliser le programme xfontsel ou un utilitaire équivalent devrait faciliter la tâche.

La commande "widget_class" définit le style d'une classe de widgets. Ces classes sont énumérées dans la Section 5.1, « Hiérarchie des widgets »Hiérarchie des widgets de la vue d'ensemble des widgets.

La commande "widget" applique un style donné à un ensemble de widgets portant un nom spécifique, quel que soit le style normal de cette classe de widgets. Ces widgets sont enregistrés dans l'application avec la méthode set_name(). Ceci permet de modifier les attributs d'un widget au coup par coup plutôt que de définir les attributs d'une toute une classe de widgets. Je vous recommande de documenter chacun de ces widgets spécifiques, permettant ainsi à l'utilisateur de les personnaliser.

Quand on utilise le mot-clé parent comme attribut, le widget utilise les attributs de son parent dans l'application.

Lorsque l'on définit un style, on peut attribuer les éléments d'un style déjà défini à ce nouveau style.

 
Sélectionnez
1.
2.
3.
4.
5.
  style "main_button" = "button"
  {
    font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
    bg[PRELIGHT] = { 0.75, 0, 0 }
  }

Cet exemple utilise le style "button" et crée un nouveau style "main_button" simplement en modifiant la police et la couleur d'arrière-plan de l'état présélectionné (PRELIGHT) du style "button".

Naturellement, beaucoup de ces attributs ne s'appliquent pas à tous les widgets. C'est une simple question de bon sens. Ce qui peut s'appliquer devrait fonctionner.

XXIII-C. Exemple de fichier rc

 
Sélectionnez
1.
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
# -*- coding:utf-8 -*-      
# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
#
pixmap_path "/usr/include/X11R6/pixmaps:/home/images/pixmaps"
#
# style <name> [= <name>]
# {
#   <option>
# }
#
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>

# Voici la liste de tous les états possibles. 
# Certains ne s'appliquent pas à tous les widgets
#
# NORMAL - L'état normal d'un widget, la souris n'est pas 
# au-dessus, il n'est pas enfoncé, etc.
#
# PRELIGHT - Lorsque le widget est survolé par la souris, 
# les couleurs définies pour cet état seront utilisées.
#
# ACTIVE - Lorsque le widget est cliqué ou enfoncé, il devient 
# actif et les attributs définis pour cet état seront utilisés.
#
# INSENSITIVE - Lorsqu'un widget est marqué "insensible", 
# et ne peut être activé, il prendra ces attributs
#
# SELECTED - Quand un objet est sélectionné, il prend ces attributs.
#
# À partir de ces états, on peut définir les attributs des widgets pour 
# chacun d'eux avec les commandes suivantes :
#
# fg - indique la couleur de premier plan d'un widget.
# fg - indique la couleur d'arrière-plan d'un widget.
# bg_pixmap - l'arrière-plan du widget est une image en mosaïque.
# font - définit la police utilisée avec ce widget.
#

# Ceci crée un style appelé "button". Le nom n'a pas réellement 
# d'importance, il est assigné aux widgets en cours à la fin du fichier.

style "window"
{
  # Ceci remplit l'espacement autour de la fenêtre avec l'image indiquée.
  #bg_pixmap[<STATE>] = "<pixmap filename>"
  bg_pixmap[NORMAL] = "warning.xpm"
}

style "scale"
{
  # Donne la valeur rouge à la couleur de premier plan (la couleur 
  # de police) dans l'état "NORMAL".
  
  fg[NORMAL] = { 1.0, 0, 0 }
  
  # Donne à ce widget la même image de fond que celle de son parent.
  bg_pixmap[NORMAL] = "<parent>"
}

style "button"
{
  # Ceci montre tous les états possibles d'un bouton. Le seul 
  # qui ne s'applique pas dans ce cas est l'état "SELECTED".
  
  fg[PRELIGHT] = { 0, 1.0, 1.0 }
  bg[PRELIGHT] = { 0, 0, 1.0 }
  bg[ACTIVE] = { 1.0, 0, 0 }
  fg[ACTIVE] = { 0, 1.0, 0 }
  bg[NORMAL] = { 1.0, 1.0, 0 }
  fg[NORMAL] = { .99, 0, .99 }
  bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
  fg[INSENSITIVE] = { 1.0, 0, 1.0 }
}

# Dans cet exemple, le style "main_button" hérite des attributs 
# du style "button" et ensuite, on remplace les couleurs de police 
# et d'arrière-plan de l'état "PRELIGHT"

style "main_button" = "button"
{
  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
  bg[PRELIGHT] = { 0.75, 0, 0 }
}

style "toggle_button" = "button"
{
  fg[NORMAL] = { 1.0, 0, 0 }
  fg[ACTIVE] = { 1.0, 0, 0 }
  
  # Ceci définit comme image d'arrière-plan du bouton à bascule, celle 
  # de son parent (tel qu'il est défini dans l'application).
  bg_pixmap[NORMAL] = "<parent>"
}

style "text"
{
  bg_pixmap[NORMAL] = "marble.xpm"
  fg[NORMAL] = { 1.0, 1.0, 1.0 }
}

style "ruler"
{
  font = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*"
}

# pixmap_path "~/.pixmaps"

# Les lignes suivantes indiquent aux widgets d'utiliser les styles 
# définis ci-dessus. 
# Les types de widget sont énumérés dans la hiérarchie des classes, 
#, mais on pourrait aussi les rappeler dans ce document pour servir 
# de référence aux utilisateurs.

widget_class "GtkWindow" style "window"
widget_class "GtkDialog" style "window"
widget_class "GtkFileSelection" style "window"
widget_class "*Gtk*Scale" style "scale"
widget_class "*GtkCheckButton*" style "toggle_button"
widget_class "*GtkRadioButton*" style "toggle_button"
widget_class "*GtkButton*" style "button"
widget_class "*Ruler" style "ruler"
widget_class "*GtkText" style "text"

# Cette ligne donne à tous les boutons, enfants de la fenêtre 
# principale ("main window"), le style main_button. Ceux-ci doivent 
# être renseignés pour en profiter.
widget "main window.*GtkButton*" style "main_button"

précédentsommairesuivant

Copyright © 2005 John Finlay. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.