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

2024-10-01 17:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我用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()

在自我设置['recentitems']是打开文件时修改的deque;然后再次调用init_file_菜单。我的目标是清空菜单,然后按正确的顺序重新填充正确的项目。这段代码在启动时填充菜单时工作正常。但由于某种原因菜单.删除所有的工作都很好并且清空菜单,追加调用不会重新添加菜单项,并且它仍然是空的。如果我调用它的get_children方法,我会看到它们都在内部,但是接口没有更新以反映这一点。如何刷新显示的菜单并使“最近使用的项目”列表按预期工作?在

我也会接受如何使用RecentChooserMenu小部件的指导,如果这是我想要的。在


Tags: 项目selfgtk列表init菜单itemfile
1条回答
网友
1楼 · 发布于 2024-10-01 17:25:53

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

相关问题 更多 >

    热门问题