前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >GTK 菜单的创建详解

GTK 菜单的创建详解

作者头像
RainMark
发布于 2019-09-10 11:38:04
发布于 2019-09-10 11:38:04
1.6K00
代码可运行
举报
文章被收录于专栏:RainMark 的文章RainMark 的文章
运行总次数:0
代码可运行

1 定义

1.1 菜单由菜单条和菜单项组成,它们的定义如下所示:

  1. 菜单项(GtkMenuItem):添加到菜单条或下拉菜单中构件
  2. 顶层菜单项:添加到菜单条上的菜单项称为顶层菜单项
  3. 下拉菜单(GtkMenu):当鼠标移动到某个菜单项后显示出来的菜单(GtkMenu)称为下拉菜单。它通常用来作为放置菜单项的容器

1.2 菜单的创建

  1. 创建一个菜单条
  2. 往菜单条上添加菜单项(顶层菜单项)
  3. 创建一个下拉菜单,并将该下拉菜单作为顶层菜单项的子菜单

1.3 相关函数

  1. ============================================================================== 菜单条操作 gtk_menu_bar_new:创建菜单条 gtk_menu_bar_append:往菜单条尾部添加菜单项 gtk_menu_bar_prepend:往菜单条首部添加菜单项 gtk_menu_bar_insert:往菜单条中指定的位置添加菜单项 ==============================================================================
  2. 菜单项操作 gtk_menu_item_new_with_label:创建带有标签的菜单项 gtk_menu_item_new:创建一个菜单分隔条(菜单分隔条实际上是不带标签的菜单项) gtk_menu_item_set_submenu:将一个下拉菜单设置成指定菜单项的子菜单 ==============================================================================
  3. 下拉菜单操作 gtk_menu_new:创建下拉菜单 gtk_menu_append:往下拉菜单尾部添加菜单项 gtk_menu_prepend:往下拉菜单首部添加菜单项 gtk_menu_insert:往下拉菜单中指定的位置添加菜单项

2 菜单的使用

============================================================================== 创建菜单条

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GtkWidget *menubar,*menu,*menuitem
menubar=gtk_menu_bar_new();

============================================================================== 往菜单条中添加顶层菜单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
menuitem=gtk_menu_item_new_with_label("文件");
gtk_menu_bar_append(GTK_MENU_BAR(menubar),menuitem);
gtk_widget_show(menuitem);

============================================================================== 创建下拉菜单,并将其作为某个顶层菜单项的子菜单

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
menu=gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem),menu);

============================================================================== 往下拉菜单中添加菜单项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
menuitem=gtk_menu_item_new_with_label("新建...");
gtk_menu_append(GTK_MENU(menu),menuitem);

============================================================================== 菜单项信号处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g_signal_connect(GTK_MENU_ITEM(menuitem),"activate",G_CALLBACK(event_handle),"new");

注意: 1. activate:当用户单击菜单项是产生的信号 2. 当所有菜单项的回调函数都相同时,我们可以通过分析往回调函数传递的用户数据来判断到底用户选择的是哪个按钮(因为不同构件在注册某个信号时可以传递各自的用户数据) ==============================================================================

3 弹出式菜单

============================================================================== 用来显示弹出式菜单的回调函数的注册

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g_signal_connect_swapped (window, "button_press_event", G_CALLBACK (my_popup_handler), menu);

============================================================================== 显示弹出式菜单的回调函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static gint
my_popup_handler (GtkWidget *widget, GdkEvent *event)
{
   GtkMenu *menu;
   GdkEventButton *event_button;

   g_return_val_if_fail (widget != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_MENU (widget), FALSE);
   g_return_val_if_fail (event != NULL, FALSE);

   menu = GTK_MENU (widget);

   if (event->type == GDK_BUTTON_PRESS)
   {
      event_button = (GdkEventButton *) event;
      if (event_button->button == 3)
      {
         gtk_menu_popup (menu, NULL, NULL, NULL, NULL,
         event_button->button, event_button->time);
         return TRUE;
      }
   }
   return FALSE;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
5.使用GtkItemFactory来创建菜单


============================================================================
创建一个静态的GtkItemFactoryEntry类型的结构体数组,用来描述所要创建的菜单
static GtkItemFactoryEntry menu_items[]={
{"/File",NULL,NULL,0,""},
{"/File/_New","N",event_handle,"New",NULL},
{"/File/",NULL,NULL,0,""},
{"/File/_Exit","E",quit_application,"Exit",NULL}
};
============================================================================
创建一个快捷键组,并将它与某个窗口关联
GtkAccelGroup* accel_group=gtk_accel_group_new();
gtk_window_add_accel_group(GTK_WINDOW(window),accel_group);

============================================================================
创建一个GtkItemFactory,并指定一个快捷键组,用来保存菜单项所对应的快捷键
GtkItemFactory* item_factory=gtk_item_factory_new(GTK_TYPE_MENU_BAR,"
",accel_group);

============================================================================
使用GtkItemFactoryEntry数组来创建菜单
nmenu_items=sizeof(menu_items)/sizeof(menu_items[0]);
gtk_item_factory_create_items(item_factory,nmenu_items,menu_items,NULL);
menubar=gtk_item_factory_get_widget(item_factory,"
");
============================================================================

6.GtkItemFactoryEntry结构


=================================================================================
typedef struct {
gchar *path;                      菜单项的路径
gchar *accelerator;               菜单项对应的快捷键
GtkItemFactoryCallback callback; 回调函数
guint callback_action;            传递给回调函数的gpointer参数

gchar *item_type;
/* item_type的可能取值:
* NULL -> ""
* "" -> ""
* "

转载来自:http://blog.chinaunix.net/uid-25547034-id-3027877.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年11月 Winform控件专题 ContextMenuStrip控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
1.3K0
软件测试|超好用超简单的Python GUI库——tkinter(十六)
我们在使用各种软件时,菜单是我们最常用的功能之一,菜单以可视化的方式将一系列的“功能选项卡”进行分组,并在每个分组下又“隐藏”了许多其他的“选项卡”。当打开菜单时,这些选项卡就会“显式”的呈现出来,方便用户进行选择,比如我们常用的QQ音乐播放器,如下图:
霍格沃兹测试开发Muller老师
2023/06/02
9850
13、Java菜单条、菜单、菜单项
13、Java菜单条、菜单、菜单项 一般用Java做界面时,都得牵涉到菜单条、菜单、菜单项的设计。菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置。 13.1、菜单条(Menubar) Fram
YGingko
2017/12/28
3.4K0
Android系列之ActionBar使用详解
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。
SmileNicky
2022/05/10
3.8K0
AWT的菜单组件
推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。 https://www.captainbed.cn/f1
鲜于言悠
2024/07/01
1270
AWT的菜单组件
Java-GUI编程之菜单组件
前面讲解了如果构建GUI界面,其实就是把一些GUI的组件,按照一定的布局放入到容器中展示就可以了。在实际开发中,除了主界面,还有一类比较重要的内容就是菜单相关组件,可以通过菜单相关组件很方便的使用特定的功能,在AWT中,菜单相关组件的使用和之前学习的组件是一模一样的,只需要把菜单条、菜单、菜单项组合到一起,按照一定的布局,放入到容器中即可。
愷龍
2022/09/26
8370
Java-GUI编程之菜单组件
菜单的使用
2)弹出式菜单:一般在顶级菜单上都有很多菜单项,单击这些菜单项时会弹出一个下拉式的菜单项,我们点击的这个菜单称为弹出式菜单
Masimaro
2018/08/31
1.4K0
JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏
菜单最基本的作用就是单击做一些事情这是要用到单击事件:setOnAction(EventHandler<ActionEvent> value)
全栈程序员站长
2022/11/17
2.8K0
JavaFX+Jfoenix 学习笔记(四)–MenuBar菜单栏
【说站】python TKinter普通菜单的介绍
2、add_command添加菜单项,如果菜单是顶层菜单,从左到右添加,否则就是下拉菜单。
很酷的站长
2022/11/24
3470
【说站】python TKinter普通菜单的介绍
java.awt.swing菜单组件
在应用系统开发中,菜单组件是经常使用的组件,菜单组件包括下拉式菜单和弹出式菜单。下拉式菜单包含若干个菜单项,每个菜单项在用户单击时引发一个动作,菜单可以看做一组层次化管理的命令集合。弹出式菜单也称为快捷菜单,它是相当于某个指定组件的,当该组件受到鼠标单击时,会弹出一个菜单,这个菜单就是弹出式菜单。弹出式菜单的结构比较简单,最多只有二级菜单。
张哥编程
2024/12/19
2480
java.awt.swing菜单组件
tkinter -- Menu
程序每次打印出当前选中的语言,与 Checkbutton 不同的是,同一个组内只有一个处于选中状态
py3study
2018/08/03
1.5K0
Android-使用PopupMenu创建弹出式菜单
PopupMenu 代表弹出式菜单,它会在指定组件上,默认情况下,PopupMenu会显示该组件,PopupMenu可增加多个菜单项。
圆号本昊
2021/09/24
9820
Android-使用PopupMenu创建弹出式菜单
[javaSE] GUI(菜单)
调用Frame对象的setMenuBar()方法,设置菜单,参数:MenuBar对象
唯一Chat
2019/09/10
9600
[javaSE] GUI(菜单)
【愚公系列】2023年11月 Winform控件专题 MenuStrip控件详解
Winform控件是Windows Forms中的用户界面元素,它们可以用于创建Windows应用程序的各种视觉和交互组件,例如按钮、标签、文本框、下拉列表框、复选框、单选框、进度条等。开发人员可以使用Winform控件来构建用户界面并响应用户的操作行为,从而创建功能强大的桌面应用程序。
愚公搬代码
2023/11/30
7850
Java学习之AWT GUI编程
既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已。在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍。
全栈程序员站长
2021/04/07
1.5K0
Python--TKinter
GUI介绍 GraphicalUserInterface GUI for Python: TKinter, wxPython, PyQt TKinter: 绑定的是TK GUI工具集,用Python包装的Tcl代码 PyGIK TKinter的替代品 wxPython 跨平台的Python GUI PyQt 跨平台的 商业授权可能有问题 推荐资料 辛星GUI,辛星Python(简洁、清晰) Python GUI Programming cookbook TKinter reference a GUI for
ruochen
2021/05/11
5.3K0
Python--TKinter
Android学习之菜单
android中包含多种菜单,本例带来的是选项菜单和上下文菜单。 1.选项菜单 在android中,开发者可以在xml文档中部署所要添加的菜单,在后台调用即可。 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" > 2 3 <item 4 android:id="@+id/action_add" 5 android:title="添加" 6 android
水击三千
2018/02/27
9650
【创作赢红包】【Java AWT 图形界面编程】菜单组件 ② ( 菜单组件示例要点说明 | 菜单组件示例代码 )
菜单组件 的 总父容器是 MenuBar 菜单栏 组件 , 该组件需要放入到 Frame 窗口中 ;
韩曙亮
2023/04/01
6600
【创作赢红包】【Java AWT 图形界面编程】菜单组件 ② ( 菜单组件示例要点说明 | 菜单组件示例代码 )
Java开发GUI之Menu菜单 原
    在MacOS上的软件都有一个菜单栏,会浮现在屏幕顶部,Java的awt包中也提供了构建菜单功能的相关组件,示例代码如下:
珲少
2018/08/15
9860
Java开发GUI之Menu菜单
                                                                            原
安卓开发_浅谈OptionsMenus(选项菜单)
Android平台下所提供的菜单大体上可分为三类:选项菜单、上下文菜单和子菜单。 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单。但这个功能需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运行时按下手机的meun键是不会起作用的。 这里就先学习 选项菜单OptionsMenus 创建选项菜单有两种方式 一、xml文件静态创建 7 package information; 8 9 import com.example.allc
听着music睡
2018/05/18
7660
相关推荐
【愚公系列】2023年11月 Winform控件专题 ContextMenuStrip控件详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验