user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 10-03-2013 20:01:12

IceF0x
#! Gourou Linux

Premiers programmes GTK+

J'ai découvert un tutoriel de programmation en anglais que je vous traduis ici sur le site suivant: http://zetcode.com/tutorials/gtktutorial/firstprograms/ issu de cette série http://zetcode.com/tutorials/gtktutorial/
Voilà qui va me motiver à reprendre le C ^^

Dans cette partie du tutoriel de programmation GTK+, nous allons créer nos premiers programmes en GTK+

==Exemple simple==

Nous commençons par un exemple très simple. Nous allons montrer une fenêtre de base.

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_show(window);

  gtk_main();

  return 0;
}

Cet exemple va afficher une fenêtre de base à l'écran.

gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0`

C'est ainsi que nous compiler l'exemple.

gtk_init(&argc, &argv);

Ici, nous mettons en place la bibliothèque GTK+.

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

Nous créons un widget GtkWindow. Le type de fenêtre est GTK_WINDOW_TOPLEVEL. les fenêtres "Toplevel" ont une barre de titre et une bordure. Ils sont gérés par le gestionnaire de fenêtres.

gtk_widget_show(window);

Après, nous avons créé un widget, il faut le montrer.

gtk_main();

Ce code entre dans la boucle principale GTK +. De ce point, l'application est assis et attend que les événements se produisent.

1362937550.png

==Le centrage de la fenêtre==

Si nous ne nous positionner pas la fenêtre, le gestionnaire de fenêtres va la positionner pour nous. Dans l'exemple suivant, nous allons centrer la fenêtre.

#include <gtk/gtk.h>

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "Center");
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_widget_show(window);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return 0;
}

Dans notre exemple, nous centrons la fenêtre, définissez un titre et la taille de la fenêtre.

gtk_window_set_title(GTK_WINDOW(window), "Center");

Le gtk_window_set_title() va définir un titre de la fenêtre. Si nous ne fixons pas un titre nous-mêmes, GTK+ utilise le nom du fichier source comme titre.

gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);

Ce code définit la taille de la fenêtre de 230x150 pixels. Notez que nous parlons de l'espace client, à l'exclusion des décorations fournies par le gestionnaire de fenêtres.

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

Ce code permet de centrer la fenêtre.

 g_signal_connect_swapped(G_OBJECT(window), "destroy",
     G_CALLBACK(gtk_main_quit), NULL);

Dans l'exemple précédent, la fenêtre n'a pas été complètement détruit, quand on clique sur le bouton x. Nous pouvons le voir, si nous lançons l'exemple depuis un terminal. La fenêtre ne réagit pas au signal détruire par défaut. Nous devons explicitement mettre fin à l'application en ajoutant le signal détruire la fonction gtk_main_quit().

==L'icône de l'application==

Dans l'exemple suivant, nous montrons l'icône de l'application. La plupart des gestionnaires de fenêtres affichent l'icône dans le coin gauche de la barre de titre et sur le bouton de la barre des tâches.

#include <gtk/gtk.h>

GdkPixbuf *create_pixbuf(const gchar * filename)
{
   GdkPixbuf *pixbuf;
   GError *error = NULL;
   pixbuf = gdk_pixbuf_new_from_file(filename, &error);
   if(!pixbuf) {
      fprintf(stderr, "%s\n", error->message);
      g_error_free(error);
   }

   return pixbuf;
}

int main( int argc, char *argv[])
{
  GtkWidget *window;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "icon");
  gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));
  gtk_widget_show(window);

  g_signal_connect_swapped(G_OBJECT(window), "destroy",
      G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return 0;
}

L'exemple de code montre l'icône de l'application.

gtk_window_set_icon(GTK_WINDOW(window), create_pixbuf("web.png"));

Le gtk_window_set_icon() affiche l'icône de la fenêtre. Le create_pixbuf() crée un GdkPixbuf à partir d'un fichier png present dans le même répertoire que le code .c.

pixbuf = gdk_pixbuf_new_from_file(filename, &error);

Selon la documentation, la gdk_pixbuf_new_from_file() crée une nouvelle pixbuf en chargeant une image à partir d'un fichier. Le format de fichier est détecté automatiquement. Si NULL est retourné, l'erreur sera fixé.

1362937595.png

1362937576.png


Utiliser des logiciels propriétaires, c'est comme les plats préparés, on est incapable de dire les conservateurs qu'ils contiennent, on dira toujours que c'est bon, mais ça ne remplacera jamais le repas fait maison par sa maman.
]:D #! Crunchbang & Archlinux GNU/Linux User ]:D

Hors ligne

Pied de page des forums