PyGTK中动态修改/刷新菜单内容

2024-01-16

我正在尝试在我用 PyGTK 编写的 GUI 的菜单中实现最近打开的项目列表。我像这样初始化菜单:

self.filemenu = gtk.Menu()

self.init_file_menu()

self.fileitem = gtk.MenuItem("File")
self.fileitem.set_submenu(self.filemenu)
menubar = gtk.MenuBar()
menubar.append(self.fileitem)
outerframe.pack_start(menubar, False, False)

def init_file_menu(self):
    for widget in self.filemenu.get_children():
        self.filemenu.remove(widget)

    openitem = gtk.MenuItem("Open")
    self.filemenu.append(openitem)
    openitem.connect("activate", self.open_file)

    self.filemenu.append(gtk.SeparatorMenuItem())

    for recentitem in self.settings['recentfiles']:
        item = gtk.MenuItem(os.path.basename(recentitem))
        self.filemenu.append(item)
        item.connect("activate", self.open_file, recentitem)
    self.filemenu.show()

self.settings['recentitems'] 是一个双端队列,在打开文件时会被修改;然后再次调用 init_file_menu。我的目标是清空菜单,然后以正确的顺序重新填充正确的项目。这段代码在启动时填充菜单时工作正常。但由于某种原因,虽然对 Menu.remove 的调用一切正常并清空菜单,但追加调用不会重新向其中添加项目,并且菜单仍然为空。如果我调用它的 get_children 方法,我会看到它们都在内部,但接口尚未更新以反映这一点。如何刷新显示的菜单并使最近的项目列表按预期工作?

我也接受有关如何使用的指导最近选择菜单 http://developer.gnome.org/pygtk/stable/class-gtkrecentchoosermenu.html如果这就是我正在寻找的小部件。


由于 gtk.Menu 是一个容器,因此您需要.show将其添加到菜单后的每个项目(因为您不想调用menu.show_all()显示菜单本身的快捷方式),所以你可以item.show()刚过menu.append(item)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyGTK中动态修改/刷新菜单内容 的相关文章

随机推荐

  • 如何更改 ATOM 控制台中的控制台字体大小 [电子邮件受保护]

    I am using ATOM for all my scripting There is a package named Script where you can run your script from within ATOM by p
  • MSTest 在错误位置查找 DLL

    我正在运行一个测试工具 但由于类型未解析而无法运行 更具体地说 是错误绑定上的 SerializationException 我使用fuslogvw来追踪它在哪里寻找DLL 但没有找到它 我很困惑为什么它在它所在的位置寻找 Pre bind
  • 适用于 Google 云端硬盘的 Android API?

    目前发布的 API 似乎主要针对 Chrome 商店应用程序 是否会有适用于 Android 的 API 或者是否可以使用现有的 API 例如 Google 文档列表数据 如果是这样 应该使用哪个 URL 来列出 访问文件 编辑 随着文档列
  • Item PropertyChanged 不适用于 observableCollection。为什么?

    我到处寻找解决方案 但似乎没有深入了解 就像网上的许多帖子一样 我似乎没有让我的 itemPropertyChanged 工作 编辑集合中的项目时它不会触发 为什么 有点长 但这是我整理的一个例子 我有一个客户 ViewModel 其中包含
  • 如何以编程方式“打开”Material-UI Select 字段?

    选择字段可以在这里找到 在 Material UI 演示中 http www material ui com components select field 它的方法似乎是从菜单 弹出窗口类继承的 但我无法弄清楚如何在 onFocus 事件
  • while 循环的 Python 枚举

    Python 有一种优雅的方式自动生成计数器变量for循环 enumerate功能 这节省了初始化和递增计数器变量的需要 计数器变量也很丑陋 因为一旦循环完成它们通常就没用了 但它们的作用域不是循环的作用域 因此它们不需要占用命名空间 尽管
  • 如何将指定字段中的隐私政策添加到Chrome扩展程序中?

    是否有任何密钥或属性或其他方式可以将指定字段中的附加信息添加到 Chrome 扩展程序 Note 我们正在尝试在 Chrome 扩展程序下载 UI 中添加附加信息字段作为开发者隐私链接 但无法添加字段 您能否帮助我们了解如何在指定字段中添加
  • Spring自定义AuthenticationFailureHandler

    我已经尝试了一整天 让我的自定义身份验证失败处理程序与 Spring 3 1 3 一起使用 我认为配置正确
  • 使用 HTML 表单作为 powershell 的 GUI

    我有一个 powershell 脚本 我想使用 html 表单运行它 我所拥有的只是一些表单字段和一个按钮 当我运行 powershell 脚本时 它会打开一个新的 ie 窗口 然后导航到包含表单的正确页面 如何收集用户单击按钮后在表单中填
  • Delphi/Pascal 有静态代码分析工具吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Delphi Pascal 有静态代码分析工具吗 我见过很多 C 和 NET 的选项 但没有看到 De
  • java中如何将字符串转换为比特流

    如何将字符串转换为位 0 和 1 的流 我做了什么我采取了一个字符串 然后将其转换为一个字符数组 然后我使用了方法 称为 forDigit char int 但它没有给我作为 0 和 1 流的字符 你能帮忙吗 另外我怎样才能从位到字符进行相
  • 如何使用selenium获取td元素的文本?

    我有一个 html 表格 我需要用硒获取 td 元素的文本 html结构 table tbody tr td b Success b You have transferred 1 000 00 USD to DIST2 Your balan
  • 从 iPhone 发送 UDP 数据包

    有人有关于从 iPhone SDK 发送 UDP 数据包的好教程吗 EDIT 事实上 做到这一点真的很容易 RTFM 包含 AsyncUdpSocket 后 只需在标头中添加以下内容 AsyncUdpSocket socket 主要是 NS
  • Python Rich 表中的列表列表

    鉴于以下内容 我怎样才能将动物 年龄和性别放入每个表格单元格中 目前 所有数据最终都存储在一个单元格中 谢谢 from rich console import Console from rich table import Table lis
  • Appium Send keys() 函数发送中文字符作为英文字符串的一部分

    使用appium时send keys 函数在文本字段中发送名称 除了名称之外 文本字段中还会出现一些随机的汉字 我们在能力中使用 capabilities setCapability unicodeKeyboard true 甚至认为我们无
  • 基于行中的值的“开始”和“结束”日期

    我有一个可以找到的输入数据示例here https github com veronique ka tests blob master input xlsx input 我需要根据每行中的数据添加两列 开始日期 和 结束日期 开始日期 当所
  • 无法从 PATH 环境变量中删除 cygwin

    我最近不得不重新安装 Cygwin 在这样做时 我遇到了某些应用程序的问题 因为 Cygwin 似乎已附加到我的 PATH 环境变量中 我尝试按照这些说明删除它https www java com en download help path
  • 如何使用 SSMS 中的表值参数执行存储过程

    当我右键单击存储过程并选择执行存储过程命令时 我应该将什么作为值传递给表值参数 我不是在谈论 SSMS 查询 窗口 我说的是当您右键单击 SP 时显示的 执行过程 对话框 我可以通过此屏幕直接向 SP 提供参数值吗 这是可以做到的 例如 假
  • 如何在 Ruby 中将字符串转换为常量?

    如何转换字符串 User to User Object const get User 无需 ActiveSupport
  • PyGTK中动态修改/刷新菜单内容

    我正在尝试在我用 PyGTK 编写的 GUI 的菜单中实现最近打开的项目列表 我像这样初始化菜单 self filemenu gtk Menu self init file menu self fileitem gtk MenuItem F