Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在PyGTK中动态修改/刷新菜单内容_Python_Gtk_Pygtk - Fatal编程技术网

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

Python 在PyGTK中动态修改/刷新菜单内容,python,gtk,pygtk,Python,Gtk,Pygtk,我试图在我用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

我试图在我用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.remove all work fine并清空菜单时,append调用不会将项目重新添加到菜单中,并且仍然为空。如果我调用它的get_children方法,我会看到它们都在内部,但是接口没有更新以反映这一点。如何刷新显示的菜单并使“最近使用的项目”列表按预期工作


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

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

啊,对了,这比我尝试的更有意义。self.filemenu.show_all()似乎也能工作。