juffun 发表于 2008-6-2 00:10:54

编了个gtk的物品管理程序,改了clist里面某个值后显示不刷新

/*一个微型的物品管理程序:有物品显示栏,增加(减少)物品选项,增加(减少)物品的数量栏,增加(减少)物品的名称选项,和更新按钮*/

#include <gtk/gtk.h>
gint state=-1;/*说明是要增加还是要减少的状态,1是增加,-1是减少*/
gchar *quality; /*用于记录*/
gint quality_int;
gint i=0;
gchar *my_data="显示器";
gchar* itoa(gint i)   /*定义itoa函数*/
{
    gchar *a=malloc(42);
    if (a) sprintf(a,"%d",i);
    return a;
}
/*表格的定义*/
   gchar *titles[]=
{
   "名称","编号","数量"
};
gchar *rows[]=
{
    {"显示器","BS111","12"},
    {"键盘","KD152","3"},
    {"鼠标","MU561","6"},
    {"主机","BO987","56"},
    {"音响","MK964","12"},
    {"主板","YT432","45"},
    {"软件","LINUX","1"}
};
/* 取得数据行数*/
gint row_count = sizeof(rows) > 0 ? sizeof(rows)/sizeof(rows) : 0;
gchar *glist[]={"显示器","键盘","鼠标","主机","主板","音响","软件", NULL};



void quit_win(GtkWidget *window,gpointer *data)
{
   gtk_main_quit();
}
gint click_button1(GtkWidget *widget,gpointer *data)
{
   state=1;
   g_print("%s ",(gchar *)data);
   return state;
}
gint click_button2(GtkWidget *widget,gpointer *data)
{
    state=-1;
    g_print("%s ",(gchar *)data);       /*state的值是获得了*/
    return state;
}

/*获取选项里面的东西*/
gpointer my_callback_function(GtkWidget *widget,gpointer *data)
{
   my_data= gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
   return my_data;
}
/*refresh_button所对应的函数*/
gchar refresh(GtkWidget *refresh_button,gpointer input_text)
{
   guint tmp;
   gint r;
   quality=(gchar *)gtk_entry_get_text(GTK_ENTRY(input_text));
   quality_int=atoi(quality);
   for(i=0;i<row_count;i++)
   {
      r=strcmp(rows,my_data);
          if(!r)
         {
            tmp=atoi(rows)+state*quality_int;
            if(tmp<0)
               {
                  tmp=0;
               }
               rows=itoa(tmp);
               g_printf("%d",tmp);
                  return rows;
         }
   }
}
gint main(gint argc,gchar **argv)
{

    GtkWidget *window;
    GtkWidget *refresh_button;
    GtkWidget *hbox,*vbox,*hbox1;
    GtkWidget *radio1,*radio2;
    GtkWidget *group;
    GtkWidget *combo;
    GtkWidget *input_text;
    GtkWidget *clist;
    GtkWidget *add_button;
    GtkWidget *delete_button;
    /*初始化window*/

gtk_init(&argc,&argv);
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_window_set_title(GTK_WINDOW(window),"Shop-Manager");
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window),150,150);
    /*设置输入框*/
   input_text=gtk_entry_new_with_max_length(3);
/*表格*/
clist=gtk_clist_new_with_titles(3,titles);
gtk_clist_set_column_width(GTK_CLIST(clist),0,75);
gtk_clist_set_column_width(GTK_CLIST(clist),1,75);
gtk_clist_set_column_width(GTK_CLIST(clist),2,65);
/*表格内容的输入*/
for ( i=0; i< row_count; i++)
    {
      gtk_clist_append(GTK_CLIST(clist),rows);
    }

/*关闭按钮*/
   g_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(quit_win),NULL);
   /*设置radio按钮*/
   radio1=gtk_radio_button_new_with_label(NULL,"增加");
   g_signal_connect(GTK_OBJECT(radio1),"clicked",GTK_SIGNAL_FUNC(click_button1),"增加");
   group=gtk_radio_button_group(GTK_RADIO_BUTTON(radio1));
    radio2=gtk_radio_button_new_with_label(group,"减少");
   g_signal_connect(GTK_OBJECT(radio2),"clicked",GTK_SIGNAL_FUNC(click_button2),"减少");
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2),TRUE);
   gtk_widget_show(radio1);
   gtk_widget_show(radio2);
   
   vbox=gtk_vbox_new(FALSE,0);
hbox1=gtk_hbox_new(FALSE,0);
   hbox=gtk_hbox_new(FALSE,0);
   refresh_button=gtk_button_new_with_label("更新");
add_button=gtk_button_new_with_label("添加");
delete_button=gtk_button_new_with_label("删除");
    gtk_container_add(GTK_CONTAINER(window),vbox);
    /*设置组合框*/
combo = gtk_combo_box_new_text ();
   for (i = 0; i < 7; i++)
         {
         gtk_combo_box_append_text (GTK_COMBO_BOX (combo), glist);
          }
       gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
       gtk_box_pack_start(GTK_BOX(vbox),clist,TRUE,TRUE,2);
       gtk_box_pack_start(GTK_BOX(hbox1),combo,TRUE,TRUE,0);
       gtk_box_pack_start(GTK_BOX(hbox1),add_button,TRUE,TRUE,0);
       gtk_box_pack_start(GTK_BOX(hbox1),delete_button,TRUE,TRUE,0);
       gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,0);
       gtk_box_pack_start(GTK_BOX(hbox),radio1,FALSE,FALSE,2);
       gtk_box_pack_start(GTK_BOX(hbox),radio2,FALSE,FALSE,2);
       gtk_box_pack_start(GTK_BOX(hbox),input_text,FALSE,FALSE,0);
       gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,2);
       gtk_box_pack_start(GTK_BOX(vbox),refresh_button,FALSE,FALSE,2);
       gtk_widget_show_all(window);

    /*点击按钮更新数据*/
    g_signal_connect(GTK_OBJECT(refresh_button),"clicked",GTK_SIGNAL_FUNC(refresh),input_text);
    g_signal_connect(GTK_OBJECT(combo),"changed",G_CALLBACK(my_callback_function),NULL);
    gtk_main();
    return 0;
}
    改了表格里面某项的值后,显示表格里面的内容并没有刷新,有什么办法解决啊?谢谢了~~
页: [1]
查看完整版本: 编了个gtk的物品管理程序,改了clist里面某个值后显示不刷新