1

我一直在使用 Glade 在菜单栏中为基于 Gtk3.4/3.6 的应用程序创建我的应用程序菜单,如下所示:

<object class="GtkMenu" id="popup_menu">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <child>
      <object class="GtkMenuItem" id="play_album_menu_item">
        <property name="use_action_appearance">False</property>
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="tooltip_text" translatable="yes">Play this album</property>
        <property name="label" translatable="yes">Play Album</property>
        <property name="use_underline">True</property>
        <signal name="activate" handler="play_album_menu_item_callback" swapped="no"/>
      </object>
    </child>

然而,最新的基于 Gnome 的 GTK3.8 应用程序已经从基于 GtkMenu/UI-Manager 的菜单创建转移到现在使用基于 GMenu 和 GMenuItem 的创建。

我已经看到解释如何单独编码菜单项的 Python 代码示例。

但是,我试图通过尝试使用类似的基于 Glade XML 的菜单创建过程来节省时间/提高可维护性和可读性:

  1. 创建 GMenu
  2. 创建 GMenuItem 列表
  3. 设置各种属性,例如灵敏度、工具提示
  4. 连接信号事件

以前我只是做了类似的事情:

ui = Gtk.Builder()
ui.add_from_file("menufile.xml")
ui.connect_signals(self)
popup_menu = ui.get_object('popup_menu')

等等等等

这对 GMenu 和 GMenuItems 可行吗?

如果是这样,任何人都可以通过示例 Python 代码示例或指向现有 Python 代码的链接为我指明正确的方向吗?

4

1 回答 1

1

对于 C,bloatpad 示例显示了可以在 GtkBuilder 文件中使用的新 XML 格式: https ://git.gnome.org/browse/gtk+/tree/examples/bloatpad.c

但是,您必须手动编写这些内容。Glade 还不允许您编辑 GMenus,只会默默地删除节点。

于 2013-10-02T09:22:37.377 回答