3

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の呼び出しはすべて正常に機能し、メニューを空にしますが、append呼び出しはアイテムを再追加せず、空のままになります。get_childrenメソッドを呼び出すと、それらはすべて内部にあることがわかりますが、これを反映するようにインターフェイスが更新されていません。表示されたメニューを更新して、最近のアイテムリストを期待どおりに機能させるにはどうすればよいですか?

それが私が探しているものであるならば、私はまた、 RecentChooserMenuウィジェットを使用する方法についての指示を受け入れます。

4

1 に答える 1

5

gtk.Menuはコンテナであるため、メニューに追加した後はすべてのアイテムを追加する必要があります(メニュー自体を表示するショートカットを.show呼び出したくないため)。menu.show_all()item.show()menu.append(item)

于 2012-06-22T18:22:36.297 に答える