当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : gtk编写的个界面,有点小问题求助,谢谢!
帖子发表于 : 2008-05-26 13:25 

注册: 2008-05-13 20:25
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
#include <gtk/gtk.h>

void quit_win(GtkWidget *window,gpointer data)
{
gtk_main_quit();
}

void click_button(GtkWidget *widget,gpointer *data)

{
g_print("%s ",(char *)data);
}

int main(int argc,char **argv)
{
GtkWidget *window;
GtkWidget *refresh_button;
GtkWidget *quantity_input_text;
GtkWidget *scrolled;
GtkWidget *hbox,*vbox,*vbox1;
GtkWidget *radio1,*radio2;
GtkWidget *group;
GtkWidget *glist;
GtkWidget *combo;
GtkWidget *input_text;
GtkWidget *clist;

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),200,150);
/*设置输入框*/
input_text=gtk_entry_new();
gtk_entry_set_text (GTK_ENTRY (input_text), "请输入");
gtk_entry_set_max_length(GTK_ENTRY(input_text),3);

/*关闭按钮*/
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_button),"增加");
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_button),"减少");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2),TRUE);
gtk_widget_show(radio1);
gtk_widget_show(radio2);

vbox=gtk_vbox_new(FALSE,0);
vbox1=gtk_vbox_new(FALSE,0);
hbox=gtk_hbox_new(FALSE,0);
refresh_button=gtk_button_new_with_label("更新");
gtk_container_add(GTK_CONTAINER(window),vbox);
/*设置组合框*/
glist=NULL;
glist=g_list_append(glist,"显示器");
glist=g_list_append(glist,"键盘");
glist=g_list_append(glist,"鼠标");
glist=g_list_append(glist,"主机");
glist=g_list_append(glist,"音响");
glist=g_list_append(glist,"主板");
glist=g_list_append(glist,"软件");
combo=gtk_combo_new();
gtk_combo_set_popdown_strings(GTK_COMBO(combo),glist);
/*设置表格*/
char *titles[]=
{
"名称","编号","数量"
};
char *rows1[]=
{
"显示器","BS111","12"
};
char *rows2[]=
{
"键盘","KD152","3"
};
char *rows3[]=
{
"鼠标","MU561","6"
};
char *rows4[]=
{
"主机","BO987","56"
};
char *rows5[]=
{
"音响","MK964","12"
};
char *rows6[]=
{
"主板","YT432","45"
};
char *rows7[]=
{
"软件","LINUX","1"
};
clist=gtk_clist_new_with_titles(3,titles);
gtk_clist_set_column_width(GTK_CLIST(clist),0,65);
gtk_clist_set_column_width(GTK_CLIST(clist),1,65);
gtk_clist_set_column_width(GTK_CLIST(clist),2,65);

gtk_clist_append(GTK_CLIST(clist),rows1);
gtk_clist_append(GTK_CLIST(clist),rows2);
gtk_clist_append(GTK_CLIST(clist),rows3);
gtk_clist_append(GTK_CLIST(clist),rows4); /*这个地方想用个for语句,可不知道怎么用???*/
gtk_clist_append(GTK_CLIST(clist),rows5);
gtk_clist_append(GTK_CLIST(clist),rows6);
gtk_clist_append(GTK_CLIST(clist),rows7);
gtk_box_pack_start(GTK_BOX(vbox),clist,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(vbox1),radio1,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(vbox1),radio2,FALSE,FALSE,2);
gtk_box_pack_start(GTK_BOX(hbox),vbox1,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),combo,FALSE,FALSE,4);

gtk_box_pack_start(GTK_BOX(vbox),refresh_button,FALSE,FALSE,2);

gtk_widget_show_all(window);

gtk_main();
return 0;

}
1: 那个“输入(input_text)”和“更新(refresh_button)”的那个框的长度怎么缩短一些?
2:如何让它初始显示的文字的个数不受 gtk_entry_set_max_length=3的限制?
3:for循环的那个地方该怎么写?
谢谢! --NextBlue


_________________
感受LINUX的精神


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-05-26 15:27 

注册: 2005-09-28 9:03
帖子: 243
送出感谢: 0 次
接收感谢: 0 次
1、2:gtk没研究过。

引用:
3:for循环的那个地方该怎么写?


代码:
    // 初始化数据
    char *rows[][3] = {
        {"显示器","BS111","12"},
        {"键盘","KD152","3"},
        .......   
    };

    // 取得数据行数
    int row_count = sizeof(rows) > 0 ? sizeof(rows)/sizeof(rows[0]) : 0;

    // 添加
    int i;
    for ( i=0; i< row_count; i++)
    {
        gtk_clist_append(GTK_CLIST(clist),rows[i]);
    }

}


最后由 linser 编辑于 2008-05-26 15:32,总共编辑了 1 次

页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-05-26 15:31 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
看devhelp

gtk_entry_new_with_max_length ()

GtkWidget* gtk_entry_new_with_max_length (gint max);

可以用glade画界面,然后这样调入生成界面。直观些。
glade_xml_new ()
glade_xml_signal_autoconnect_full () 似乎有问题。


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-05-26 21:40 

注册: 2008-05-13 20:25
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
linser 写道:
1、2:gtk没研究过。

引用:
3:for循环的那个地方该怎么写?


代码:
    // 初始化数据
    char *rows[][3] = {
        {"显示器","BS111","12"},
        {"键盘","KD152","3"},
        .......   
    };

    // 取得数据行数
    int row_count = sizeof(rows) > 0 ? sizeof(rows)/sizeof(rows[0]) : 0;

    // 添加
    int i;
    for ( i=0; i< row_count; i++)
    {
        gtk_clist_append(GTK_CLIST(clist),rows[i]);
    }

}


谢谢啦~~


_________________
感受LINUX的精神


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Google [Bot] 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译