我正在尝试在我用 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(使用前将#替换为@)