GtkFr - Cours Gtk+-2

PyLesDecorations

PageAccueil :: LesNews :: Telechargement :: Liens :: Forum :: LeChat :: Contact
DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes 38.107.191.90
<< Les entrées de saisie PyGtk Les images >>


Les décorations

1. Présentation

Maintenant, nous connaissons suffisamment de widgets pour créer des fenêtres complexes. Afin d'améliorer l'esthétique des ces fenêtres nous allons voir comment ajouter des décorations (ou séparation) entre les différentes parties de la fenêtre. Il existe deux types de décoration :

1.1 Hiérarchie

GObject -> GtkObject -> GtkWidget -> GtkContainer -> GtkBin? -> GtkFrame
GObject -> GtkObject -> GtkWidget -> GtkSeparator? -> GtkHSeparator
GObject -> GtkObject -> GtkWidget -> GtkSeparator? -> GtkVSeparator

2. Le cadre

2.1 Création

frame = gtk.Frame(label)
Le paramètre label est tout simplement le texte qui sera affiché en haut à gauche du cadre (position par défaut).

2.2 Modification du texte

Il peut arriver que dans votre application, le texte du cadre nécessite une modification. Bien entendu, le widget GtkFrame est fourni avec toutes les méthodes nécessaires.
frame.set_label(label)
Le paramètre label est le nouveau texte à inscrire.
Pour récupérer le texte du GtkFrame, la méthode est :
texte = frame.get_label()

2.3 Remplacer le texte par un widget

Les cadres offrent aussi la possibilité de remplacer le texte par un widget quelconque (GtkImage, GtkStockItem?, ...) grâce à cette méthode :
frame.set_label_widget(label_widget)
Et comme toujours, la méthode permettant de connaître le widget affiché:
widget = frame.get_label_widget()

2.4 Position du texte

Par défaut, la position du texte est en haut à gauche du cadre, centré en hauteur par rapport à la ligne supérieure. Cela aussi peut être modifié avec cette méthode :
frame.set_label_align(xalign, yalign)
Les valeurs xalign et yalign doivent être comprises entre 0.0 et 1.0.
Le paramètre xalign définit la position horizontale du texte. Une valeur de 0.0 positionne le texte à gauche du cadre, tandis qu'une valeur de 1.0 le positionne à droite. Evidemment, une valeur de 0.5 centrera le texte.
Quant à yalign, il permet de définir la position verticale du texte par rapport à la ligne supérieur du cadre. Une valeur de 0.0 mettra le nommeur en dessous de la ligne et une valeur de 1.0 le mettra au-dessus de la ligne.
On peut, bien sûr, connaître les valeurs de positionnement avec la méthode suivante :
xalign, yalign = frame.get_label_align()

2.5 Style du cadre

Le style du cadre correspond plus à la configuration visuelle des lignes du cadre et plus précisément encore l'ombre des lignes. Cette modification de fait avec cette méthode :
frame.set_shadow_type(type)
Le paramètre type peut prendre cinq valeurs différentes dont voici la liste avec leurs illustrations :







Et sans surprise, voici la méthode qui permet de connaître le type des lignes :
shadow_type = frame.get_shadow_type()

3. Les lignes

Alors cette fois, cela va être très rapide et très simple.

3.1 Création

hs = gtk.HSeparator()
vs = gtk.VSeparator()
La première classe crée une ligne horizontale alors que la deuxième crée une ligne verticale.
Il n'y a rien de plus à propos de ce widget.

4. Exemple

4.1 Description

Afin de vous montrer l'avantage visuel de l'utilisation des GtkFrame et GtkSeparator?, nous allons créer une fenêtre qui demande à l'utilisateur de saisir des informations le concernant (nom, prénom, adresse, ...).
Voila à quoi ressemble la fenêtre sans l'utilisation des décorations :

Attention, ce programme ne fait rien du tout, c'est simplement pour montrer la différence entre avec et sans les décorations.

4.2 Programme exemple

# -*- Encoding: Latin-1 -*-
import gtk

def main():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    # On ajoute un espace de 5 sur les bords de la fenetre
    window.set_border_width(5)
    window.set_title("GtkEntry et GtkSeparator")
    window.set_default_size(320, 200)
    window.connect("destroy", gtk_main_quit, None)

    vbox = gtk.VBox(True, 0)
    window.add(vbox)

    # Creation du premier GtkFrame
    frame = gtk.Frame("Etat civil")
    vbox.pack_start(frame, True, False, 0)

    # Creation et insertion d une boite pour le premier GtkFrame
    vbox_frame = gtk.VBox(True, 0)
    frame.add(vbox_frame)

    # Creation et insertion des elements contenus dans le premier GtkFrame
    label = gtk.Label("Nom :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    pLabel = gtk_.Label(u'Prénom')
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    # Creation d un GtkHSeparator
    separator = gtk.HSeparator()
    vbox_frame.pack_start(separator, True, False, 0)

    pLabel = gtk.Label("Date de naissance :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    # Creation du deuxieme GtkFrame
    frame = gtk.Frame("Domicile")
    vbox.pack_start(frame, True, False, 0)

    # Creation et insertion d une boite pour le deuxieme GtkFrame
    vbox_frame = gtk.VBox(True, 0)
    frame.add(vbox_frame)

    # Creation et insertion des elements contenus dans le deuxieme GtkFrame
    pLabel = gtk.Label("Adresse :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    label = gtk.Label("Adresse :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    label = gtk.Label("Code postal :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    label = gtk.Label("Ville :")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    # Creation du troisieme GtkFrame
    frame = gtk.Frame(u'Téléphones')
    vbox.pack_start(frame, True, False, 0)

    # Creation et insertion d une boite pour le troisieme GtkFrame
    vbox_frame = gtk.VBox(True, 0)
    frame.add(vbox_frame)

    # Creation et insertion des elements contenus dans le troisieme GtkFrame
    label = gtk.Label("Domicile")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    label = gtk.Label("Professionnel")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    label = gtk.Label("Portable")
    vbox_frame.pack_start(label, True, False, 0)
    entry = gtk.Entry()
    vbox_frame.pack_start(entry, True, False, 0)

    window.show_all()

    gtk.main()

if __name__ == '__main__':
    main()
Résultat :



<< Les entrées de saisie PyGtk Les images >>

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]
Apinc