以前我想实现checkbutton列表,并且底色为白色。结果找了大半天也只找到GtkCList,但它只能加入text。
现在做其他东西时看到了GtkList,原来这个控件功能很强大,几乎可以加入任何其他控件,checkbutton也就不在话下了。不过它只能加入一列控件,而GtkCList加入文本时是可以有多列的。
#include <stdlib.h>#include <gtk/gtk.h>#define COLUMN 1GtkWidget *PackStartLabel(GtkWidget *box, const gchar *text){ GtkWidget *label; label = gtk_label_new(text); gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); gtk_widget_show(label); return label;}int main (int argc, char *argv[]){ gint i; gchar buf[50]; GtkWidget *win = NULL; GtkWidget *vbox = NULL; GtkWidget *gtklist; GtkWidget *list_item; GtkWidget *check; GList *dlist = NULL; GtkWidget *clist; gchar *text[COLUMN]; /* Initialize GTK+ */ g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); gtk_init (&argc, &argv); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); /* Create the main window */ win = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width (GTK_CONTAINER (win), 8); gtk_window_set_title (GTK_WINDOW (win), "Check box list demo"); gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER); gtk_widget_set_usize(win, 300, 300); gtk_widget_realize (win); g_signal_connect (win, "destroy", gtk_main_quit, NULL); vbox = gtk_vbox_new (TRUE, 6); gtk_container_add (GTK_CONTAINER (win), vbox); PackStartLabel(vbox, "GtkList"); /* Cretate gtklist */ gtklist = gtk_list_new(); gtk_box_pack_start(GTK_BOX(vbox), gtklist, FALSE, FALSE, 0); // Create list_item with checkbutton, and add list_item to gtklist // GtkList nearly can add any widgets for(i = 0; i < 2; ++i) { sprintf(buf, "channel%d",i); check = gtk_check_button_new_with_label(buf); list_item = gtk_list_item_new(); gtk_container_add(GTK_CONTAINER(list_item), check); gtk_container_add(GTK_CONTAINER(gtklist), list_item); } // use GList to add list_items to gtklist for(i = 2; i < 4; ++i) { sprintf(buf, "test%d",i); list_item = gtk_list_item_new_with_label(buf); dlist = g_list_append(dlist, list_item); } gtk_list_append_items(GTK_LIST(gtklist), dlist); PackStartLabel(vbox, "GtkCList"); // create clist with lables // GtkCList can only add lables clist = gtk_clist_new (1); gtk_box_pack_start(GTK_BOX(vbox), clist, FALSE, FALSE, 0); for(i = 0; i < 2; ++i) { sprintf(buf,"test%d",i); text[0] = buf; gtk_clist_append (GTK_CLIST(clist),text); } /* Enter the main loop */ gtk_widget_show_all (win); gtk_main (); return 0;}
