logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

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

#1 29-12-2019 16:38:54

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

C gtk3 et frames contenant une liste de label

Jamais deux sans trois big_smile

J'ai ce code qui marche :


  frame = gtk_frame_new("L'hiver");
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_container_add (GTK_CONTAINER (window), box);
  gtk_box_pack_start(GTK_BOX (box), frame, FALSE, FALSE, 5);

  label = gtk_label_new ("Feuilles mortes");
  gtk_container_add ( GTK_CONTAINER (frame), label);


  frame = gtk_frame_new("L'été");
  gtk_box_pack_start(GTK_BOX (box), frame, FALSE, FALSE, 5);

  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  label = gtk_label_new ("Canicule");
  gtk_container_add ( GTK_CONTAINER (frame), label);

   sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_box_pack_start(GTK_BOX (box), sep, FALSE, FALSE, 5);
 



https://pasteboard.co/INvXxgK.png

Mais si je veux ajouter un label dans ma frame :


frame = gtk_frame_new("L'hiver");
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_container_add (GTK_CONTAINER (window), box);
  gtk_box_pack_start(GTK_BOX (box), frame, FALSE, FALSE, 5);

  label = gtk_label_new ("Feuilles mortes");
  gtk_container_add ( GTK_CONTAINER (frame), label);
 
label = gtk_label_new ("Canicule");
  gtk_container_add ( GTK_CONTAINER (frame), label);

 


Ca ne change rien, et j'ai ce message a l'execution:


lem@debian:~$ ./Ram/sep

(sep:28779): Gtk-WARNING **: 16:31:57.331: Attempting to add a widget with type GtkLabel to a GtkFrame, but as a GtkBin subclass a GtkFrame can only contain one widget at a time; it already contains a widget of type GtkLabel
 



Meme raduit c'est  du chinois pour moi.

"Tentative d'ajouter un widget de type gtkLabel a un gtkframe maisun en tant que GtkBin sous-classe a GtkFrame peux contenir uniquement un widget a la fois.
Ceci contient déjà un GtkLabel"

Mais c'est justement ce que je voudrais faire.
Je recrée une nouvel *box?

Dernière modification par Clem (29-12-2019 17:03:19)


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#2 29-12-2019 20:50:52

lann
Membre
Lieu : Bretagne
Distrib. : Debian Bookworm
Noyau : Linux 6.1.0-10-amd64
(G)UI : XFCE
Inscription : 28-04-2015

Re : C gtk3 et frames contenant une liste de label

pas besoin de rajouter un GtkLabel dans un GtkFrame puisqu'il possède déjà un.

Voir les fonctions
void     gtk_frame_set_label ()
void     gtk_frame_set_label_widget ()
const gchar *     gtk_frame_get_label ()
GtkWidget *     gtk_frame_get_label_widget ()

Hors ligne

#3 31-12-2019 15:00:34

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : C gtk3 et frames contenant une liste de label

Ok j'ai compris smile Merci

Il me reste un probleme.
Avec ce code:


 frame = gtk_frame_new("L'hiver");
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_container_add (GTK_CONTAINER (window), box);
  gtk_box_pack_start(GTK_BOX (box), frame, FALSE, FALSE, 5);

  label = gtk_label_new ("Feuilles mortes :\n"
      "Feuilles vives :\n"
      "matins mornes :");
  gtk_container_add ( GTK_CONTAINER (frame), label);

  frame = gtk_frame_new("L'été");
  gtk_box_pack_start(GTK_BOX (box), frame, FALSE, FALSE, 5);
   
  label = gtk_label_new ("Canicule :\n"
      "Flore cramée :\n"
      "Riviere coule");
  gtk_container_add ( GTK_CONTAINER (frame), label);

  sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_box_pack_start(GTK_BOX (box), sep, FALSE, FALSE, 5);

 



Le séparateur va a droite du deuxieme frame alors que je voudrais qu'il soit en dessous des deux, sur une nouvelle ligne.

Ps Non je n'ai pas compris en fait. L'execution me renvoit;


sep:331): Gtk-WARNING **: 15:06:55.865: Attempting to add a widget with type GtkBox to a container of type GtkApplicationWindow, but the widget is already inside a container of type GtkApplicationWindow, please remove the widget from its existing container first.
 


Du coup j'en déduit que c'est le même type de problème que précédemment.

Dernière modification par Clem (31-12-2019 15:24:20)


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#4 31-12-2019 16:01:07

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : C gtk3 et frames contenant une liste de label

Je déduis que ce qui ne colle pas ici (je tente de crer une box horizontale):


 sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_container_add (GTK_CONTAINER (window), hbox);
  gtk_box_pack_start(GTK_BOX (hbox), sep, FALSE, FALSE, 5);
 



C'est de tenter de rajouter une box a la window?
gtk_container_add (GTK_CONTAINER (window), hbox);
  gtk_box_pack_start(GTK_BOX (hbox), sep, FALSE, FALSE, 5);

Les widget box et hbox ne peuvent pas exister ensemble dans le widget window .
C'est bien ça?

PS : Si mais ça ne résoud pas mon probleme.

Dernière modification par Clem (31-12-2019 16:18:44)


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

#5 01-01-2020 10:05:30

lann
Membre
Lieu : Bretagne
Distrib. : Debian Bookworm
Noyau : Linux 6.1.0-10-amd64
(G)UI : XFCE
Inscription : 28-04-2015

Re : C gtk3 et frames contenant une liste de label

Le séparateur va a droite du deuxieme frame alors que je voudrais qu'il soit en dessous des deux, sur une nouvelle ligne.



Il faut pour cela utiliser une VBOX, si tu veux avoir un Widget en dessous des autres.
C'est une histoire de disposition des objets

Un petit dessin
https://framapic.org/gallery#dZIkS6nwjz … rtZZ7E.jpg

Donc pour agencer tout cela :
Dans la Window une VBox

Dans la VBox :
- Une HBOX
- Le séparateur

Dans la HBox :
- les deux frames

Le code que je n'ai pas testé :

void activate (GtkApplication *app, gpointer user_data)
{
  GtkWidget *window;
  GtkWidget *frame1, *frame2;
  GtkWidget *sep;
  GtkWidget *vbox, *hbox;

  window = gtk_application_window_new(app);
  gtk_window_set_title (GTK_WINDOW (window),"Machin");
  gtk_container_set_border_width (GTK_CONTAINER  ( window), 10);
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  frame1 = gtk_frame_new("L'hiver");
  frame2 = gtk_frame_new("L'été");
  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
  sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);

  gtk_container_add (GTK_CONTAINER (window), vbox);

  gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
  gtk_box_pack_start(GTK_BOX (vbox), sep, FALSE, FALSE, 5);
 
  gtk_box_pack_start(GTK_BOX (hbox), frame1, FALSE, FALSE, 5);
  gtk_box_pack_start(GTK_BOX (hbox), frame2, FALSE, FALSE, 5);

  gtk_widget_show_all(window);
}



Tu veux sans doute ajouter des labels dans les Frames. Mais ça ne doit pas être possible.
A l'avenir fait un dessin (comme je viens de le faire) de ce que tu veux

Essaye de suivre également un tuto sur la programmation avec GTK3

Bonne année smile

Dernière modification par lann (01-01-2020 10:08:28)

Hors ligne

#6 01-01-2020 15:01:17

Clem
Membre
Lieu : Au coin du bois
Distrib. : Stable
Noyau : 4.9.0-4 *-amd-64
(G)UI : XMonad & Mate
Inscription : 09-03-2010

Re : C gtk3 et frames contenant une liste de label

Tilt , ça y est j'ai compris big_smile
Les emboitement, les orientations toussa
J'ai fini par parvenir a ce que je veux
https://framapic.org/8a9YLlbb6m3T/96h3cAQ3s7x2.png


#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

void activate (GtkApplication *app, gpointer user_data);

int main ( int argc, char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION(app), argc, argv);

  return status;

}


void activate (GtkApplication *app, gpointer user_data)
{
  GtkWidget *window;
  GtkWidget *frame;
  GtkWidget *sep;
  GtkWidget *vbox, *hbox;
  GtkWidget *label;

  window = gtk_application_window_new(app);
  gtk_window_set_title (GTK_WINDOW (window),"Machin");
  gtk_container_set_border_width (GTK_CONTAINER  ( window), 10);
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
  gtk_container_add (GTK_CONTAINER (window), vbox);
 
  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_box_pack_start(GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
 
  sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_box_pack_start(GTK_BOX (vbox), sep, FALSE, FALSE, 5);


  frame = gtk_frame_new("L'hiver");
  gtk_container_add (GTK_CONTAINER (hbox), frame);
  gtk_box_pack_start(GTK_BOX (hbox), frame, FALSE, FALSE, 5);


  label = gtk_label_new ("Feuilles mortes :\n"
      "Feuilles vives :\n"
      "matins mornes :\n");
  gtk_container_add ( GTK_CONTAINER (frame), label);

  frame = gtk_frame_new("L'été");
  gtk_box_pack_start(GTK_BOX (hbox), frame, FALSE, FALSE, 5);
   
  label = gtk_label_new ("Canicule :\n"
      "Flore cramée :\n"
      "Riviere coule :\n");
  gtk_container_add ( GTK_CONTAINER (frame), label);

  sep = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_box_pack_start(GTK_BOX (vbox), sep, FALSE, FALSE, 5);

  hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
  gtk_container_add (GTK_CONTAINER (vbox), hbox);
 

  frame = gtk_frame_new("Le printemps");
  gtk_container_add (GTK_CONTAINER (hbox), frame);
  gtk_box_pack_start(GTK_BOX (hbox), frame, FALSE, FALSE, 5);


  label = gtk_label_new ("Feuilles vives :\n"
      "grosse pluie :\n"
      "matins clair :\n");
  gtk_container_add ( GTK_CONTAINER (frame), label);

  frame = gtk_frame_new("L'automne");
  gtk_box_pack_start(GTK_BOX (hbox), frame, FALSE, FALSE, 5);
   
  label = gtk_label_new ("L'odeur :\n"
      "La grisaille:\n"
      "Les ronces :\n");
  gtk_container_add ( GTK_CONTAINER (frame), label);


  gtk_widget_show_all(window);
}


 


merci a toi, tout est plus clair maintenant smile
Une bonne année a toi aussi


Moi, je suis PC (x86_64) et formater windows, c'était MON idée
Le sommeil de la raison ...

Hors ligne

Pied de page des forums