【问题标题】:Dynamically modifying/refreshing menu contents in PyGTK在 PyGTK 中动态修改/刷新菜单内容
【发布时间】:2012-06-23 02:22:36
【问题描述】:

我正在尝试在我用 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 方法,我会看到它们都在内部,但接口尚未更新以反映这一点。如何刷新显示的菜单并使最近的项目列表按预期工作?

如果这是我正在寻找的,我也会接受有关如何使用 RecentChooserMenu 小部件的指导。

【问题讨论】:

    标签: python gtk pygtk


    【解决方案1】:

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

    之后

    【讨论】:

    • 啊,对,这比我尝试的更有意义。 self.filemenu.show_all() 似乎也可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2012-08-16
    • 2012-02-10
    • 2013-01-12
    • 2014-09-12
    相关资源
    最近更新 更多