⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtk_tut_fr.txt

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 TXT
📖 第 1 页 / 共 5 页
字号:
      GtkWidget *window;      GtkWidget *button;      GtkWidget *box1;      /* Cette fonction est appel dans toutes les applications GTK.       * Les paramre pass en ligne de commande sont analys et       * retourn l'application. */      gtk_init (&argc, &argv);      /* Crtion d'une nouvelle fenre. */      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);      /* Nouvel appel qui intitule notre nouvelle fenre       * "Salut les boutons !" */      gtk_window_set_title (GTK_WINDOW (window), "Salut les boutons !");      /* Configuration d'un gestionnaire pour "delete_event" afin de       * quitter immiatement GTK. */      gtk_signal_connect (GTK_OBJECT (window), "delete_event",                          GTK_SIGNAL_FUNC (delete_event), NULL);      /* Configuration de la largeur du contour de la fenre. */      gtk_container_border_width (GTK_CONTAINER (window), 10);      /* Crtion d'une boe pour y placer les widgets.       * Ceci est drit en dails plus loin dans la section       * placement  La boe n'est pas matialis, elle est juste       * utilis comme moyen d'arranger les widgets. */      box1 = gtk_hbox_new(FALSE, 0);      /* On met la boe dans la fenre principale. */      gtk_container_add (GTK_CONTAINER (window), box1);      /* On cr un nouveau bouton portant le label Bouton 1  */      button = gtk_button_new_with_label ("Bouton 1");      /* Lorsque le bouton est cliqu on appelle la fonction rappel       * avec un pointeur sur la chae Bouton 1 comme paramre. */      gtk_signal_connect (GTK_OBJECT (button), "clicked",                          GTK_SIGNAL_FUNC (rappel), (gpointer) "Bouton 1");      /* Au lieu d'utiliser gtk_container_add, on place ce bouton dans       * la boe invisible qui a plac dans la fenre. */      gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);      /* N'oubliez jamais cette ape qui indique GTK que la configuration       * de ce bouton est termin et qu'il peut re affich */      gtk_widget_show(button);      /* On fait la me chose pour crr un deuxie bouton. */      button = gtk_button_new_with_label ("Bouton 2");      /* On appelle la me fonction de rappel avec un paramre diffent,       * un pointeur sur la chae Bouton 2  */      gtk_signal_connect (GTK_OBJECT (button), "clicked",                          GTK_SIGNAL_FUNC (rappel), (gpointer) "Bouton 2");      gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);      /* L'ordre dans lequel on affiche les boutons n'est pas vraiment       * important, mais il est prable d'afficher la fenre en dernier       * pour qu'elle surgisse d'un coup. */      gtk_widget_show(button);      gtk_widget_show(box1);      gtk_widget_show (window);      /* Le reste est dans gtk_main et on attend que la fe commence ! */      gtk_main ();      return 0;  }  Compilez ce programme en utilisant les mes paramres que pour l'exemple  prent. Vous remarquerez que, maintenant, il est plus difficile de  quitter le programme : vous devez utiliser le gestionnaire de fenres  ou une commande shell pour le druire. Un bon exercice pour le lecteur  serait d'inser un troisie bouton Quitter qui permettrait de sortir du  programme. Vous pouvez aussi jouer avec les options de  _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_) en lisant la section suivante. Essayez de  redimensionner la fenre, et observez son comportement.  Juste une remarque : il existe une autre constante utilisable avec  _g_t_k___w_i_n_d_o_w___n_e_w_(_) - GTK_WINDOW_DIALOG.  Ceci permet d'interagir de fan  un peu diffente avec le gestionnaire de fenres et doit re utilispour  les fenres temporaires comme les boes de dialogue, par exemple.  44..  PPllaacceemmeenntt ddeess wwiiddggeettss  Lorsqu'on cr une application, on veut mettre plus qu'un simple bouton  dans une fenre. Notre premier exemple Bonjour le monde n'utilisait  qu'un seul widget et on pouvait donc simplement faire un appel  _g_t_k___c_o_n_t_a_i_n_e_r___a_d_d pour placer le widget dans la fenre. Mais si l'on  dire en mettre plus, comment peut-on contrer l'endroit ole widget sera  positionn? C'est ici que le placement entre en jeu.  44..11..  TThhrriiee ddeess bbooeess ddee ppllaacceemmeenntt  La majeure partie du placement est faites en crnt des boes comme dans  l'exemple ci-dessus. Ce sont des widgets containers invisibles ol'on  peut placer nos widgets. Elles existent sous deux formes : boes  horizontales et boes verticales. Lorsque l'on place des widgets dans  une boe horizontale, les objets sont ins horizontalement de gauche  droite ou de droite gauche selon l'appel utilis Dans une boe  verticale, les widgets sont plac de haut en bas ou vice versa. On peut  utiliser n'importe quelle combinaison de boes l'intieur ou cd'autres  boes pour crr l'effet dir  Pour crr une nouvelle boe horizontale, on appelle _g_t_k___h_b_o_x___n_e_w_(_), et  pour les boes verticales, _g_t_k___v_b_o_x___n_e_w_(_). Les fonctions  _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_) et _g_t_k___b_o_x___p_a_c_k___e_n_d_(_) servent placer les objets  l'intieur de ces containers.  La fonction _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_) placera  de haut en bas dans une boe verticale et de gauche droite dans une boe  horizontale.  _g_t_k___b_o_x___p_a_c_k___e_n_d_(_) fera le contraire en plant de bas en  haut et de droite gauche. En utilisant ces fonctions, on peut aligner  droite ou gauche nos widgets et me les manger de n'importe quelle fan  pour obtenir l'effet dir Dans la plupart de nos exemples, on utilisera  _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_). Un objet peut re un autre container ou un  widget. En fait, de nombreux widgets (dont les boutons) sont eux-mes  des containers, mais on utilise galement seulement un label dans un  bouton.  En utilisant ces appels, GTK sait ovous voulez placer vos widgets et  il peut donc les dimensionner automatiquement et faire d'autres choses  bien pratiques. Il existe aussi plusieurs options permettant de priser  comment les widgets doivent re plac. Comme vous pouvez l'imaginer,  cette mhode nous donne pas mal de libertpour placer et crr les  widgets.  44..22..  DDaaiillss ssuurr lleess bbooeess  cause de cette libert le placement des boes avec GTK peut parare  doutant au premier abord. Il existe beaucoup d'options et il n'est pas  tout de suite ident de comprendre comment elles s'accordent toutes  ensemble. En fait, il y a 5 styles de base diffents.  <IMG ALIGN="center" SRC="packbox1.gif" VSPACE="15" HSPACE="10"  ALT="Box Packing Example Image" WIDTH="528" HEIGHT="235">  Chaque ligne contient une boe horizontale (_h_b_o_x) contenant plusieurs  boutons. L'appel _g_t_k___b_o_x___p_a_c_k indique la fan dont sont plac tous les  boutons dans la hbox.  Chaque bouton est placdans la hbox de la me fan  (mes paramres que la fonction _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_)).  Voici la dlaration de la fonction _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t.  void gtk_box_pack_start (GtkBox    *box,                           GtkWidget *child,                           gint       expand,                           gint       fill,                           gint       padding);  Le premier paramre est la boe dans laquelle on place l'objet, le  second est cet objet. Tous les objets sont tous des boutons  jusqu'maintenant, on place donc des boutons dans des boes.  Le paramre _e_x_p_a_n_d de _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t_(_) ou _g_t_k___b_o_x___p_a_c_k___e_n_d_(_) contre  la fan dont le widget est placdans la boe. S'il vaut TRUE, les widgets  sont dispos dans la boe de fan en occuper tout l'espace. S'il vaut  FALSE, la boe est rrie pour correspondre la taille du widget. Mettre  _e_x_p_a_n_d FALSE vous permettra d'aligner droite et gauche vos widgets.  Sinon, ils s'argiront pour occuper toute la boe. Le me effet pourrait  re obtenu en utilisant uniquement une des deux fonctions  _g_t_k___b_o_x___p_a_c_k___s_t_a_r_t ou _p_a_c_k___e_n_d.  Le paramre _f_i_l_l des fonctions _g_t_k___b_o_x___p_a_c_k contre si de l'espace  supplentaire doit re allouaux objets eux-mes (TRUE), ou si on doit  rajouter de l'espace (_p_a_d_d_i_n_g) dans la boe autour des objets (FALSE).  Il n'a de sens que si le paramre _e_x_p_a_n_d vaut TRUE.  Lorsque l'on cr une nouvelle boe, on utilise une fonction comme :       GtkWidget * gtk_hbox_new (gint homogeneous,                                 gint spacing);  Le paramre _h_o_m_o_g_e_n_e_o_u_s de _g_t_k___h_b_o_x___n_e_w (et c'est la me chose pour  _g_t_k___v_b_o_x___n_e_w) vifie que chaque objet de la boe ait la me taille (i.e.  la me largeur dans une hbox, la me hauteur dans une vbox). S'il vaut  TRUE, le paramre _e_x_p_a_n_d des fonctions _g_t_k___b_o_x___p_a_c_k sera toujours mis  TRUE.  Quelle est alors la diffence entre les paramres _s_p_a_c_i_n_g  (configurlorsque la boe est cre) et _p_a_d_d_i_n_g (configurlorque les ents  sont plac) ? _s_p_a_c_i_n_g ajoute de l'espace entre les objets, et _p_a_d_d_i_n_g  en ajoute de chaque cd'un objet. La figure suivante devrait lairer  tout cela :  <IMG ALIGN="center" SRC="packbox2.gif" VSPACE="15" HSPACE="10"  ALT="Box Packing Example Image" WIDTH="509" HEIGHT="213">  Voici le code utilispour crr les images ci-dessus. J'y ai mis beaucoup  de commentaires en espant que vous n'aurez pas de proble pour le  relire. Compilez-le et jouez avec les diffents paramres.  44..33..  PPrrooggrraammmmee ddee ddoonnssttrraattiioonn ddeess ppllaacceemmeennttss  #include "gtk/gtk.h"  void  delete_event (GtkWidget *widget, GdkEvent *event, gpointer *data)  {      gtk_main_quit ();  }  /* Construction d'une nouvelle hbox remplie de boutons. Les paramres qui   * nous intessent sont pass cette fonction.   * On n'affiche pas la boe, mais tout ce qu'elle contient. */  GtkWidget *make_box (gint homogeneous, gint spacing,                       gint expand, gint fill, gint padding)  {      GtkWidget *box;      GtkWidget *button;      char padstr[80];      /* Crtion d'une hbox avec les paramres homogeneous et spacing       * voulus. */      box = gtk_hbox_new (homogeneous, spacing);      /* Crtion d'une sie de boutons configur de fan appropri */      button = gtk_button_new_with_label ("gtk_box_pack");      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      button = gtk_button_new_with_label ("(box,");      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      button = gtk_button_new_with_label ("button,");      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      /* Crtion d'un bouton portant un label dendant de la valeur       * du paramre expand. */      if (expand == TRUE)              button = gtk_button_new_with_label ("TRUE,");      else              button = gtk_button_new_with_label ("FALSE,");      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      /* Me chose que ci-dessus mais sous forme abr. */      button = gtk_button_new_with_label (fill ? "TRUE," : "FALSE,");      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      /* Rupation du paramre padding sous forme de chae. */      sprintf (padstr, "%d);", padding);      button = gtk_button_new_with_label (padstr);      gtk_box_pack_start (GTK_BOX (box), button, expand, fill, padding);      gtk_widget_show (button);      return box;  }  int main (int argc, char *argv[])  {      GtkWidget *window;      GtkWidget *button;      GtkWidget *box1;      GtkWidget *box2;      GtkWidget *separator;      GtkWidget *label;      GtkWidget *quitbox;      int which;      /* Initialisation, ne jamais oublier ! :) */      gtk_init (&argc, &argv);      if (argc != 2) {          fprintf (stderr, "usage : %s num, onum vaut 1, 2, ou 3.\n", *argv);          /* Nettoyage dans GTK et sortie avec un code d'erreur de 1 */          gtk_exit (1);      }      which = atoi (argv[1]);      /* Crtion de notre fenre. */      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);      /* Il ne faut jamais oublier de connecter le signal "destroy" la       * fenre principale. C'est tr important pour disposer d'un       * comportement intuitif aduat. */      gtk_signal_connect (GTK_OBJECT (window), "delete_event",                          GTK_SIGNAL_FUNC (delete_event), NULL);      gtk_container_border_width (GTK_CONTAINER (window), 10);      /* Crtion d'une boe verticale (vbox) pour y placer les boes       * horizontales.       * Ceci permet de placer les boes horizontales contenant les boutons       * les unes au dessus des autres dans cette vbox. */      box1 = gtk_vbox_new (FALSE, 0);      /* L'exemple afficher. Ils correspondent aux images ci-dessus. */      switch (which) {      case 1:          /* Crtion d'un label. */          label = gtk_label_new ("gtk_hbox_new (FALSE, 0);");          /* Alignement du label gauche.  On prisera cette fonction ainsi           * que les autres dans la section sur les attributs des widgets. */          gtk_misc_set_alignment (GTK_MISC (label), 0, 0);          /* Placement du label dans la boe verticale (vbox box1). Il ne           * faut pas oublier que les widgets qui s'ajoutent une vbox sont           * plac les uns au dessus des autres. */          gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 0);          /* Affichage du label */          gtk_widget_show (label);          /* On appelle notre fonction de construction de boe :           * homogeneous = FALSE, spacing = 0,           * expand = FALSE, fill = FALSE, padding = 0 */          box2 = make_box (FALSE, 0, FALSE, FALSE, 0);          gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);          gtk_widget_show (box2);          /* On appelle notre fonction de construction de boe :           * homogeneous = FALSE, spacing = 0,           * expand = FALSE, fill = FALSE, padding = 0 */          box2 = make_box (FALSE, 0, TRUE, FALSE, 0);          gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);          gtk_widget_show (box2);          /* Paramres : homogeneous = FALSE, spacing = 0,           * expand = TRUE, fill = TRUE, padding = 0 */          box2 = make_box (FALSE, 0, TRUE, TRUE, 0);          gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0);          gtk_widget_show (box2);          /* Crtion d'un sarateur, on verra cela plus tard, mais ils sont           * simples utiliser. */          separator = gtk_hseparator_new ();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -