好用的GtkList:实现checkbutton列表

   以前我想实现checkbutton列表,并且底色为白色。结果找了大半天也只找到GtkCList,但它只能加入text。

   现在做其他东西时看到了GtkList,原来这个控件功能很强大,几乎可以加入任何其他控件,checkbutton也就不在话下了。不过它只能加入一列控件,而GtkCList加入文本时是可以有多列的。

 

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

#define COLUMN   1

GtkWidget *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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值