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

第68页的gtk+编程例子——选择菜单

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

第68页的gtk+编程例子——选择菜单

以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第68页的内容——检查菜单,还是使用上一个例子程序,将gtk_menu_item_new_with_label改为gtk_radio_menu_item_new_with_label,与第53页的选择按钮gtk_radio_button一样思路,将多个选项加入一个组group,才能实现多选一的功能,group的初始值为NULL,之后将第一个选项变成group的值,再之后剩下的选项的group值设置为第一选项group值,而gtk3-demo中的Menus例子程序是使用函数gtk_radio_menu_item_with_label_from_widget(NULL, 第一选项);
gtk_radio_menu_item_join_group(GTK_RADIO_MENU_ITEM(第一选项), 第N选项);
将第N选项的group值加入第一选项的group值,比较简化,难以一下子理解

gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (zhou1), TRUE); 用来设置选项默认状态是已经点选的,没有gtk_radio_menu_item_set_active函数,注意前有小写check后面也有大写CHECK

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


#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;
	GSList *groupzhou = NULL;
	
	GSList *groupfen = NULL;
	GSList *groupmian = NULL;
	GSList *groupfan = NULL;
	GSList *groupqita = NULL;
	
	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_radio_menu_item_new_with_label (groupzhou,"白粥");
	
	
	groupzhou = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (zhou1));
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (zhou1), TRUE);
	
	
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou1);
	
	zhou2 = gtk_radio_menu_item_new_with_label (groupzhou,"猪红粥");
	groupzhou = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (zhou1));
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou2);
	zhou3 = gtk_radio_menu_item_new_with_label (groupzhou,"八宝粥");
	groupzhou = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (zhou1));
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou3);
	zhou4 = gtk_radio_menu_item_new_with_label (groupzhou,"艇仔粥");
	groupzhou = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (zhou1));
	gtk_menu_shell_append (GTK_MENU_SHELL (zhoumenu), zhou4);
	zhou5 = gtk_radio_menu_item_new_with_label (groupzhou,"皮蛋瘦肉粥");
	groupzhou = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (zhou1));
	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_radio_menu_item_new_with_label (groupfen, "螺蛳粉");
	groupfen = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fen1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen1);
	fen2 = gtk_radio_menu_item_new_with_label (groupfen, "桂林米粉");
	groupfen = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fen1));
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (fen2), TRUE);
	
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen2);
	fen3 = gtk_radio_menu_item_new_with_label (groupfen, "肠粉");
	groupfen = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fen1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen3);
	fen4 = gtk_radio_menu_item_new_with_label (groupfen, "汤粉");
	groupfen = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fen1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fenmenu), fen4);
	fen5 = gtk_radio_menu_item_new_with_label (groupfen, "炒粉");
	groupfen = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fen1));
	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_radio_menu_item_new_with_label (groupmian, "牛腩面");
	groupmian = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mian1));
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian1);
	mian2 = gtk_radio_menu_item_new_with_label (groupmian, "兰州拉面");
	groupmian = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mian1));
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian2);
	mian3 = gtk_radio_menu_item_new_with_label (groupmian, "捞面");
	groupmian = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mian1));
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (mian3), TRUE);
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian3);
	mian4 = gtk_radio_menu_item_new_with_label (groupmian, "竹升面");
	groupmian = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mian1));
	gtk_menu_shell_append (GTK_MENU_SHELL (mianmenu), mian4);
	mian5 = gtk_radio_menu_item_new_with_label (groupmian, "刀削面");
	groupmian = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (mian1));
	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_radio_menu_item_new_with_label (groupfan, "叉烧饭");
	groupfan = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fan1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan1);
	fan2 = gtk_radio_menu_item_new_with_label (groupfan, "扬州炒饭");
	groupfan = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fan1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan2);
	fan3 = gtk_radio_menu_item_new_with_label (groupfan, "煲仔饭");
	groupfan = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fan1));
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan3);
	fan4 = gtk_radio_menu_item_new_with_label (groupfan, "蒸饭");
	groupfan = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fan1));
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (fan4), TRUE);
	gtk_menu_shell_append (GTK_MENU_SHELL (fanmenu), fan4);
	fan5 = gtk_radio_menu_item_new_with_label (groupfan, "竹筒饭");
	groupfan = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (fan1));
	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_radio_menu_item_new_with_label (groupqita, "云吞");
	groupqita = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (qita1));
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita1);
	qita2 = gtk_radio_menu_item_new_with_label (groupqita, "萝卜糕");
	groupqita = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (qita1));
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita2);
	qita3 = gtk_radio_menu_item_new_with_label (groupqita, "粽");
	groupqita = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (qita1));
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita3);
	qita4 = gtk_radio_menu_item_new_with_label (groupqita, "油炸鬼");
	groupqita = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (qita1));
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita4);
	qita5 = gtk_radio_menu_item_new_with_label (groupqita, "蛋塔");
	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (qita5), TRUE);
	groupqita = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (qita1));
	gtk_menu_shell_append (GTK_MENU_SHELL (qitamenu), qita5);
	
	gtk_widget_show_all (window);
	
	gtk_main ();
	
	return 0;
}

效果图如下

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/746845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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