栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

第62页的gtk+编程例子——菜单

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第62页的gtk+编程例子——菜单

主要是参考《GTK+:“菜单” (menubar)和“工具栏”(toolbars)》
https://www.cnblogs.com/hotsummer/archive/2011/03/01/1967731.html
例子中的vbox = gtk_vbox_new(FALSE, 0);是属于gtk+2.0的,要改为vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);才能在gtk+3.0编译通过,原作者的讲解是比较容易理解,在此要感谢原作者

以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第62页的内容——菜单,结合自己的理解,写了一个简单的小程序

粥 粉 面 饭 其它
白粥 螺蛳粉 牛腩面 叉烧饭 云吞
猪红粥 桂林米粉 兰州拉面 扬州炒饭 萝卜糕
八宝粥 肠粉 捞面 煲仔饭 粽
艇仔粥 汤粉 竹升面 蒸饭 油炸鬼
皮蛋瘦肉粥 炒粉 刀削面 竹筒饭 蛋塔

在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page62.c -o page62 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page62


#include 

	


int main( int argc, char *argv[] )
{
	GtkWidget *window;
	
	GtkWidget *vbox;
	GtkWidget *menubar;
	GtkWidget *zhou;
	GtkWidget *fen;
	GtkWidget *mian;
	GtkWidget *fan;
	GtkWidget *qita;
	GtkWidget *zhoumenu;
	GtkWidget *zhou1;
	GtkWidget *zhou2;
	GtkWidget *zhou3;
	GtkWidget *zhou4;
	GtkWidget *zhou5;
	GtkWidget *fenmenu;
	GtkWidget *fen1;
	GtkWidget *fen2;
	GtkWidget *fen3;
	GtkWidget *fen4;
	GtkWidget *fen5;
	GtkWidget *mianmenu;
	GtkWidget *mian1;
	GtkWidget *mian2;
	GtkWidget *mian3;
	GtkWidget *mian4;
	GtkWidget *mian5;
	GtkWidget *fanmenu;
	GtkWidget *fan1;
	GtkWidget *fan2;
	GtkWidget *fan3;
	GtkWidget *fan4;
	GtkWidget *fan5;
	GtkWidget *qitamenu;
	GtkWidget *qita1;
	GtkWidget *qita2;
	GtkWidget *qita3;
	GtkWidget *qita4;
	GtkWidget *qita5;
	
	gtk_init (&argc, &argv);
	

	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	
	gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
	
	gtk_window_set_default_size(GTK_WINDOW(window), 500, 200);
	
	gtk_window_set_title (GTK_WINDOW (window), "菜单");
	
	g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
	
	
	vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
	
	gtk_container_add (GTK_CONTAINER (window), vbox);
	

	menubar = gtk_menu_bar_new ();
	
	gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, TRUE, 0);
	
	zhou = gtk_menu_item_new_with_label ("粥");
	
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), zhou);
	
	fen = gtk_menu_item_new_with_label ("粉");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), fen);
	mian = gtk_menu_item_new_with_label ("面");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), mian);
	fan = gtk_menu_item_new_with_label ("饭");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), fan);
	qita = gtk_menu_item_new_with_label ("其它");
	gtk_menu_shell_append (GTK_MENU_SHELL(menubar), qita);
	
	
	zhoumenu = gtk_menu_new ();
	
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (zhou), zhoumenu);
	zhou1 = gtk_menu_item_new_with_label ("白粥");
	
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou1);
	
	zhou2 = gtk_menu_item_new_with_label ("猪红粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou2);
	zhou3 = gtk_menu_item_new_with_label ("八宝粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou3);
	zhou4 = gtk_menu_item_new_with_label ("艇仔粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou4);
	zhou5 = gtk_menu_item_new_with_label ("皮蛋瘦肉粥");
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou5);

	fenmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (fen), fenmenu);
	fen1 = gtk_menu_item_new_with_label ("螺蛳粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen1);
	fen2 = gtk_menu_item_new_with_label ("桂林米粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen2);
	fen3 = gtk_menu_item_new_with_label ("肠粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen3);
	fen4 = gtk_menu_item_new_with_label ("汤粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen4);
	fen5 = gtk_menu_item_new_with_label ("炒粉");
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen5);

	mianmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (mian), mianmenu);
	mian1 = gtk_menu_item_new_with_label ("牛腩面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian1);
	mian2 = gtk_menu_item_new_with_label ("兰州拉面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian2);
	mian3 = gtk_menu_item_new_with_label ("捞面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian3);
	mian4 = gtk_menu_item_new_with_label ("竹升面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian4);
	mian5 = gtk_menu_item_new_with_label ("刀削面");
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian5);

	fanmenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (fan), fanmenu);
	fan1 = gtk_menu_item_new_with_label ("叉烧饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan1);
	fan2 = gtk_menu_item_new_with_label ("扬州炒饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan2);
	fan3 = gtk_menu_item_new_with_label ("煲仔饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan3);
	fan4 = gtk_menu_item_new_with_label ("蒸饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan4);
	fan5 = gtk_menu_item_new_with_label ("竹筒饭");
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan5);

	qitamenu = gtk_menu_new ();
	gtk_menu_item_set_submenu (GTK_MENU_ITEM (qita), qitamenu);
	qita1 = gtk_menu_item_new_with_label ("云吞");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita1);
	qita2 = gtk_menu_item_new_with_label ("萝卜糕");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita2);
	qita3 = gtk_menu_item_new_with_label ("粽");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita3);
	qita4 = gtk_menu_item_new_with_label ("油炸鬼");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita4);
	qita5 = gtk_menu_item_new_with_label ("蛋塔");
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita5);
	
	gtk_widget_show_all (window);
	
	gtk_main ();
	
	return 0;
}

效果图如下

《GTK+:“菜单” (menubar)和“工具栏”(toolbars)》
https://www.cnblogs.com/hotsummer/archive/2011/03/01/1967731.html
例子中的vbox = gtk_vbox_new(FALSE, 0);是属于gtk+2.0的,要改为vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);才能在gtk+3.0编译通过,原作者的讲解是比较容易理解,在此要感谢原作者,重新排版如下:

#include 
int main( int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
GtkWidget *filemenu;
GtkWidget *file;
GtkWidget *quit;

gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 250, 200);
gtk_window_set_title(GTK_WINDOW(window), "menu");
g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
menubar = gtk_menu_bar_new();
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 3);
file = gtk_menu_item_new_with_label("File");
gtk_menu_shell_append(GTK_MENU_SHELL(menubar), file);

filemenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), filemenu);
quit = gtk_menu_item_new_with_label("Quit");
gtk_menu_shell_append(GTK_MENU_SHELL(filemenu), quit);
g_signal_connect(G_OBJECT(quit), "activate", G_CALLBACK(gtk_main_quit), NULL);

gtk_widget_show_all(window);
gtk_main();
return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/734316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号