2010-04-29 9 views
0
vbox = gtk_vbox_new(FALSE, 0); 
gtk_container_add(GTK_CONTAINER(window), vbox); 
... 
frame = gtk_fixed_new(); 
gtk_container_add(GTK_CONTAINER(window), frame); 
... 

Le code ci-dessus génère l'avertissement ci-dessous:Comment faire fonctionner le code gtk?

Gtk-AVERTISSEMENT **: tentez d'ajouter un widget avec le type GtkFixed à un GtkWindow, mais comme une sous-classe GtkBin un GtkWindow ne peut contenir un widget à la fois; il contient déjà un widget de type GtkVBox

qui se traduit par frame n'apparaît pas dans la fenêtre.

Comment puis-je faire à la fois vbox et frame montrer?

Répondre

1

Mettez les deux dans un vbox environnant (si vous voulez les empiler verticalement, c'est):

parentVbox = gtk_vbox_new(FALSE, 0); 

vbox = gtk_vbox_new(FALSE, 0); 
gtk_box_pack_start(GTK_BOX(parentVbox), vbox, TRUE, TRUE, 0); 
... 
frame = gtk_fixed_new(); 
gtk_box_pack_start(GTK_BOX(parentVbox), frame, TRUE, 0); 
... 
gtk_container_add(GTK_CONTAINER(window), parentVbox); 
+0

Je ne sais pas pourquoi, mais cela fonctionne seulement après que je change '' GTK_VBOX' à GTK_BOX', est-il typo? – Gtker

+0

@Runner: Oui, c'est le cas. Merci! – unwind

0

L'erreur que vous rencontrez est parce que tous les widgets ne peut contenir qu'un seul widget (vous voulez Vbox et frame à contenir par window), même si le widget contenu peut être complexe avec plusieurs autres widgets contenus.

Pour mettre un widget dans une boîte, vous devez utiliser gtk_box_pack_start(). Gnome Référence lien Manuel: http://library.gnome.org/devel/gtk/stable/GtkBox.html#gtk-box-pack-start

vbox = gtk_vbox_new(FALSE, 0); 
frame = gtk_fixed_new(); 
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); //the frame goes inside vbox 
... 
gtk_container_add(GTK_CONTAINER(window), vbox); //the vbox is contained by window 
+0

Les widgets dérivés de GtkBox peuvent gérer un nombre variable de widgets. –

+0

Comment écrire le bon code? Je ne connais pas encore gtk. – Gtker

Questions connexes