如何使用PyGI在GTK 4中创建应用菜单?
Gtk4 菜单实现示例(中文适配版)
我已在谷歌上大量搜索相关内容,并尝试过多个示例。现将最接近需求的修正后示例(修复了原代码中的语法错误)展示如下:
import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk, Gio class ExampleApp(Gtk.Application): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.window = None def do_activate(self): if not self.window: # 创建主窗口 self.window = Gtk.ApplicationWindow(application=self, title="GMenu示例") # 生成菜单栏 menu_bar = self.create_menu() # 将菜单栏绑定到窗口 self.window.set_menu_bar(menu_bar) # 显示窗口 self.window.present() def create_menu(self): # 初始化主菜单栏 menu_bar = Gio.Menu() # 构建文件子菜单 file_menu = Gio.Menu() file_menu.append("新建", "app.new") file_menu.append("退出", "app.quit") # 构建编辑子菜单 edit_menu = Gio.Menu() edit_menu.append("复制", "app.copy") edit_menu.append("粘贴", "app.paste") # 将子菜单添加到主菜单栏 menu_bar.append_submenu("文件", file_menu) menu_bar.append_submenu("编辑", edit_menu) # 为菜单项创建动作并绑定触发逻辑 # 新建动作 new_action = Gio.SimpleAction.new("new", None) new_action.connect("activate", self.on_new_triggered) self.add_action(new_action) # 退出动作 quit_action = Gio.SimpleAction.new("quit", None) quit_action.connect("activate", self.on_quit_triggered) self.add_action(quit_action) # 复制动作(修复原代码中的语法错误) copy_action = Gio.SimpleAction.new("copy", None) copy_action.connect("activate", self.on_copy_triggered) self.add_action(copy_action) # 粘贴动作 paste_action = Gio.SimpleAction.new("paste", None) paste_action.connect("activate", self.on_paste_triggered) self.add_action(paste_action) return menu_bar def on_new_triggered(self, action, param): print("新建动作已触发") def on_quit_triggered(self, action, param): self.quit() def on_copy_triggered(self, action, param): print("复制动作已触发") def on_paste_triggered(self, action, param): print("粘贴动作已触发") if __name__ == "__main__": app = ExampleApp(application_id="com.example.GMenuExample") app.run(None)
核心逻辑说明
- 基于
Gtk.Application搭建应用框架,do_activate方法完成窗口初始化与显示 - 使用
Gio.Menu构建层级菜单,通过append_submenu挂载子菜单 - 每个菜单项对应
Gio.SimpleAction,绑定回调函数实现点击响应 - 调用
set_menu_bar将菜单栏绑定到主窗口,完成菜单功能集成
内容的提问来源于stack exchange,提问作者dstromberg
相关产品推荐
相关产品推荐

