Vous définissez ensuite les réactions à avoir aux différents événements (clic, pression d'une touche, déplacement, masquage, ...) très simplement, en associant un nom de fonction à chaque signal vous intéressant (chaque widget peut émettre un certain nombre de signaux prédéfinis correspondants aux événement qu'il peut subir). Cette fonction sera automatiquement appelée lorsque l'événement se produira. La figure 2 représente la fenêtre permettant de réaliser cette association.![]()
Son utilisation la plus courante est ensuite de lui faire générer le code (C, C++, PERL, Ada, ...) correspondant à la création de cette interface. Il y en a pourtant une autre, beaucoup plus intéressante :![]()
<property name="resizable">True</property>
indique par exemple que la fenêtre est redimensionnable par
l'utilisateur. On trouve ensuite une balise signal indiquant
que l'on veut que la fonction close soit appelée lorsque
l'utilisateur veut fermer la fenêtre, cela permet par exemple de
terminer l'application.A partir de ce fichier, la bibliothèque libGlade permet très simplement de construire dynamiquement l'interface (ou uniquement une partie de l'interface, par exemple une boite de dialogue, un assistant, ...). Cette approche présente de nombreux avantages :<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <requires lib="gnome"/> <widget class="GtkWindow" id="window1"> <property name="visible">True</property> <property name="title" translatable="yes">Une Fenêtre</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="default_width">250</property> <property name="default_height">150</property> <property name="resizable">True</property> <signal name="delete_event" handler="close"/> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label">gtk-quit</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="pressed" handler="close"/> </widget> </child> </widget> </glade-interface>
.glade.Une classe est créée, Exemple1, qui est l'application principale. Dans son constructeur, l'interface est créée. On remarque également que la méthode close indiquée dans le .glade à été définie, charge à nous d'y faire ce que l'on souhaite. J'ai ici appelé la méthode main_quit de Gtk qui permet de mettre fin à la boucle de Gtk, et donc de quitter l'application vu que l'on ne lance rien ensuite. Le script initialise ensuite GTK, crée une instance de l'application et lance la boucle principale de GTK.#!/usr/bin/env ruby require 'libglade2' class Exemple1 def initialize(path) @glade = GladeXML.new(path) {|handler| method(handler)} end def close() Gtk.main_quit end end Gtk.init #Set correct path by yourself. Exemple1.new("exemple1.glade") Gtk.main
@glade = GladeXML.new(path) {|handler| method(handler)}![]()
Figure 5: Résultat du script de la figure 4
@glade['window1'].title="plop"
gladexml = glade_xml_new("exemple1.glade", NULL, NULL);
glade_xml_signal_autoconnect(gladexml);
window = glade_xml_get_widget(xml, "window1");
gtk_window_set_title(GTK_WINDOW (window), "plop");
$gladexml =& new GladeXml('exemple1.glade');
$gladexml->signal_autoconnect();
$window =& $gladexml->get_widget('window1');
$window->set_title('plop');
$gladexml = Gtk2::GladeXML->new('exemple1.glade');
$gladexml->signal_autoconnect_from_package('main');
$gladexml->get_widget('window1')->set_title('plop');
gladexml = gtk.glade.XML('exemple1.glade')
gladexml.autoconnect(locals())
gladexml.get_widget('window1').set_title('plop')
Glade.XML.Gtk_New (Glade_XML, "exemple1.glade"); Glade.XML.Signal_Autoconnect (Glade_XML); Window1 := Glade.XML.Get_Widget(Glade_XML, "window1") GTK.Window.Set_Title(Window1, "plop")
This document was translated from LATEX by HEVEA.