Linux C gtk的基础应用

包含:布局 组件盒、菜单、图标、图片、背景颜色、修改字体及大小

#include <gtk-2.0/gtk/gtk.h>//同时装有2.0和3.0需要指明路径
 
static void on_draw(GtkWidget *widget, cairo_t *cr, gpointer data) {
    // 在这里添加自定义的绘制逻辑
}
void destroy(GtkWidget *widget, gpointer data)
{

    gtk_main_quit();
}
GdkPixbuf * create_pixbuf(const gchar *filename)
 {
    GdkPixbuf *pixbuf;
    GError *error = NULL;
    pixbuf = gdk_pixbuf_new_from_file(filename, &error);
    if(!pixbuf)
    {
        fprintf(stderr,"%s\n",error->message);
        g_error_free(error);
    }
    return pixbuf;
}
 
int main(int argc, char **argv) 
{
    gtk_init(NULL, NULL);
 /**********创建窗口***************************/   
    GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_widget_set_usize(window,880,520);//窗口大小
    gtk_container_set_border_width(GTK_CONTAINER(window),0);//边界宽度
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);/*窗口位置在中间*/
    gtk_window_set_resizable(GTK_WINDOW(window), FALSE);//窗口伸缩设置,FALSE不可伸缩

    GtkWidget* vbox = gtk_vbox_new(FALSE,0);//纵向盒

    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(destroy),NULL);//关闭退出
    gtk_window_set_icon(GTK_WINDOW(window),create_pixbuf("IDR_MAINFRAIMNEW.ico"));//任务栏图标

/**********菜单栏***************************/   
    GtkWidget* menubar = gtk_menu_bar_new();//菜单栏

    GtkWidget* menu_dev = gtk_menu_new();
    GtkWidget* menu_dev_name = gtk_menu_item_new_with_label("设备管理");
    GtkWidget* downmenu_dev1 = gtk_menu_item_new_with_label("获取设备信息");
    GtkWidget* downmenu_dev2 = gtk_menu_item_new_with_label("获取设备状态");
    GtkWidget* downmenu_dev3 = gtk_menu_item_new_with_label("获取设备配置");
    GtkWidget* downmenu_dev4 = gtk_menu_item_new_with_label("设备初始化");
    GtkWidget* downmenu_dev5 = gtk_menu_item_new_with_label("设备自检");


    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_dev_name), menu_dev);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev1);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev2);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev3);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev4);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_dev), downmenu_dev5);

    GtkWidget* menu_role = gtk_menu_new();
    GtkWidget* menu_role_name = gtk_menu_item_new_with_label("用户管理");
    GtkWidget* downmenu_role1 = gtk_menu_item_new_with_label("添加用户");
    GtkWidget* downmenu_role2 = gtk_menu_item_new_with_label("删除用户");
    GtkWidget* downmenu_role3 = gtk_menu_item_new_with_label("登录用户");
    GtkWidget* downmenu_role4 = gtk_menu_item_new_with_label("登出用户");
    GtkWidget* downmenu_role5 = gtk_menu_item_new_with_label("设置用户口令");
    GtkWidget* downmenu_role6 = gtk_menu_item_new_with_label("获取用户信息");

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_role_name), menu_role);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role1);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role2);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role3);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role4);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role5);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_role), downmenu_role6);

    GtkWidget* menu_key = gtk_menu_new();
    GtkWidget* menu_key_name = gtk_menu_item_new_with_label("密钥管理");
    GtkWidget* downmenu_key1 = gtk_menu_item_new_with_label("备份设备密钥");
    GtkWidget* downmenu_key2 = gtk_menu_item_new_with_label("恢复设备密钥");

    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_key_name), menu_key);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_key), downmenu_key1);
    gtk_menu_shell_append(GTK_MENU_SHELL(menu_key), downmenu_key2);

    gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_dev_name,0);//菜单栏插入菜单项
    gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_role_name,1);
    gtk_menu_bar_insert(GTK_MENU_BAR(menubar), menu_key_name,2);
    //gtk_menu_bar_prepend(GTK_MENU_BAR(menubar), menu_key_name);//菜单栏从前往后插入菜单项
    //gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_dev_name);
    //gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_role_name);
    //gtk_menu_bar_append(GTK_MENU_BAR(menubar), menu_key_name);
    
    GtkWidget* labelchild1 = gtk_bin_get_child(GTK_BIN(menu_dev_name));//获取menu中的label控件
    GtkWidget* labelchild2 = gtk_bin_get_child(GTK_BIN(menu_role_name));//获取menu中的label控件
    GtkWidget* labelchild3 = gtk_bin_get_child(GTK_BIN(menu_key_name));//获取menu中的label控件
    
    PangoFontDescription *font_desc = pango_font_description_from_string("宋体 10");//改菜单字体  
    pango_font_description_set_size (font_desc, 12 * PANGO_SCALE);
    
    gtk_widget_modify_font (GTK_WIDGET(labelchild1), font_desc);
    gtk_widget_modify_font (GTK_WIDGET(labelchild2), font_desc);
    gtk_widget_modify_font (GTK_WIDGET(labelchild3), font_desc);
    pango_font_description_free (font_desc);

   
    GdkColor color;
    gdk_color_parse ("SkyBlue2", &color);//获取颜色信息
    gtk_widget_modify_bg(menubar,GTK_STATE_NORMAL, &color);//修改背景颜色
    gtk_widget_modify_bg(menu_dev,GTK_STATE_NORMAL, &color);//修改背景颜色
    gtk_widget_modify_bg(menu_role,GTK_STATE_NORMAL, &color);//修改背景颜色
    gtk_widget_modify_bg(menu_key,GTK_STATE_NORMAL, &color);//修改背景颜色


    gtk_box_pack_start(GTK_BOX(vbox),menubar,FALSE,FALSE,0);

/**********下方工作区域**********************************/   
    GtkWidget* image = gtk_image_new_from_file("img.png");
    gtk_box_pack_start(GTK_BOX(vbox),image,FALSE,FALSE,0);
   

    gtk_container_add(GTK_CONTAINER(window),vbox);//垂直布局
    

    //g_signal_connect(G_OBJECT(window),"delete event",G_CALLBACK(gtk_main_quit),NULL);//空间和消息函数创建关联
    gtk_window_set_title(GTK_WINDOW(window),"初始化工具");
    gtk_widget_show_all(window);
    
    gtk_main();
    
    return 0;
}

gcc -o test main.c `pkg-config --cflags --libs gtk+-2.0` //编译程序

./test //运行程序

运行结果展示: 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值