단추의 콜백에 gtk_container_add
& gtk_container_remove
을 사용하여이 작업을 수행 할 수 있습니다. 첫 번째보기를 컨테이너에 추가하십시오. 사용자가 단추를 클릭하면 첫 번째보기 &을 제거하고 다음 단추를 추가하십시오. 그 반대. 위젯에 대한 참조가 컨테이너 &에서 제거되면 위젯이 삭제되므로 컨테이너에 추가하기 전에 위젯에 대한 참조를 추가해야합니다. 다음은 샘플은 참조를 위해 C에 :이 도움이
#include <gtk/gtk.h>
static GtkWidget *view0;
static GtkWidget *view1;
static GtkWidget *frame;
static int current_view_id;
static GtkWidget *
create_view0 (void)
{
GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
GtkWidget *view0_content = gtk_label_new ("Here is first view");
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW
(scrolled_window), view0_content);
gtk_widget_show_all (scrolled_window);
return scrolled_window;
}
static GtkWidget *
create_view1 (void)
{
GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
GtkWidget *view1_content = gtk_label_new ("Here is next view");
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW
(scrolled_window), view1_content);
gtk_widget_show_all (scrolled_window);
return scrolled_window;
}
static gboolean
change_view (GtkWidget * button, gpointer data)
{
(void) data;
if (current_view_id == 0)
{
gtk_button_set_label (GTK_BUTTON (button), "Prev");
gtk_container_remove (GTK_CONTAINER (frame), view0);
/* Need to add reference as container will own widget ref */
/* If gtk_container_remove is called with widget's last ref, widget is destroyed */
g_object_ref (view1);
gtk_container_add (GTK_CONTAINER (frame), view1);
current_view_id = 1;
}
else
{
gtk_button_set_label (GTK_BUTTON (button), "Next");
gtk_container_remove (GTK_CONTAINER (frame), view1);
/* Need to add reference as container will own widget ref */
/* If gtk_container_remove is called with widget's last ref, widget is destroyed */
g_object_ref (view0);
gtk_container_add (GTK_CONTAINER (frame), view0);
current_view_id = 0;
}
return FALSE;
}
int
main (void)
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *button;
gtk_init (NULL, NULL);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
vbox = gtk_vbox_new (FALSE, 5);
gtk_container_add (GTK_CONTAINER (window), vbox);
frame = gtk_frame_new (" Sample for view change ");
view0 = create_view0();
view1 = create_view1();
/* Need to add reference as container will own widget ref */
/* If gtk_container_remove is called with widget's last ref, widget is destroyed */
g_object_ref (view0);
gtk_container_add (GTK_CONTAINER (frame), view0);
label = gtk_label_new ("View change sample");
button = gtk_button_new_with_label ("Next");
g_signal_connect (button, "clicked", G_CALLBACK (change_view), NULL);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_widget_show_all (window);
gtk_main();
return 0;
}
희망!
작품, 감사합니다! – Philip