0

ウィンドウと「次へ」ボタンにテキストを表示したいのですが、コードを実行しているときにエラーが発生します。

次のボタンで、他の何かを表示している次のウィンドウに移動したいと思います。誰かがこれを行う方法も教えてもらえますか?

(try:1914): Gtk-WARNING **: Attempting to add a widget with type GtkVBox to a GtkWindow, but as a GtkBin subclass a GtkWindow can only contain one widget at a time; it already contains a widget of type GtkLabel

私のコードは:

#include <gtk/gtk.h>

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

        GtkWidget *window;
        GtkWidget *next;

        GtkWidget *label;
        GtkWidget *vbox;
        GtkWidget *hbox;
        GtkWidget *halign;
        GtkWidget *valign;


        gtk_init (&argc, &argv);

        window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), "Center");//title position
        gtk_window_set_default_size(GTK_WINDOW(window),600,500);//size
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);//position
        label = gtk_label_new("Cold was my soul\n\
                        Untold was the pain\n\
                        I faced when you left me\n\
                        A rose in the rain....\n\
                        So I swore to the razor\n\
                        That never, enchained\n\
                        Would your dark nails of faith\n\
                        Be pushed through my veins again\n\
                        \n\
                        Bared on your tomb\n\
                        I'm a prayer for your loneliness\n\
                        And would you ever soon\n\
                        Come above onto me?\n\
                        For once upon a time\n\
                        On the binds of your lowliness\n\
                        I could always find the slot for your sacred key ");

 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER);
        gtk_container_add(GTK_CONTAINER(window), label);
        vbox = gtk_vbox_new(FALSE, 5);

        valign = gtk_alignment_new(0, 1, 0, 0);
        gtk_container_add(GTK_CONTAINER(vbox), valign);
        gtk_container_add(GTK_CONTAINER(window), vbox);

        hbox = gtk_hbox_new(TRUE, 3);

        next = gtk_button_new_with_label("Next");
        gtk_widget_set_size_request(next, 70, 30);
        gtk_container_add(GTK_CONTAINER(hbox), next);
        //      close = gtk_button_new_with_label("Close");
        //      gtk_container_add(GTK_CONTAINER(hbox), close);

        halign = gtk_alignment_new(1, 0, 0, 0);
        gtk_container_add(GTK_CONTAINER(halign), hbox);

        gtk_box_pack_start(GTK_BOX(vbox), halign, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(next), "clicked",
                        G_CALLBACK(gtk_main_quit), G_OBJECT(window));

        gtk_widget_show_all(window);

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


        gtk_main ();

        return 0;
}
4

1 に答える 1

1

メッセージは非常に明確です。AGtkWindowには子ウィジェットを 1 つしか含めることができませんが、既にラベルで埋められています。目的を達成するvboxには、ウィンドウに (複数のウィジェットを含めることができる) を追加し、次にlabelに追加する必要がありますvbox

于 2012-07-15T09:17:21.613 に答える