本來預期可以在 glade 裡就可以拉出這個元件,然後程式就不用寫,結果是不行。網路上範例不多,所以紀錄一下。
在 glade 裡,你要先預放一個 menuitem,假設命名為 mi_recent_items,你在程式裡就得先取出這個 menuitem,取得 RecentManager 然後建立 RecentChooserMenu,再用 mi_recent_items.set_submenu() 來設定。
RecentManager 是全系統的最近存取文件,這也是為什麼後續會要 RecentFilter 的原因,因為只要顯示需要的文件。當選取的時候,會觸發 item-activated 這個 signal。
代碼:
self.recent = gtk.RecentManager() menu_recent = gtk.RecentChooserMenu(self.recent) menu_recent.set_limit(10) # 設定要出現幾個 # 只取需要的檔案 self.file_filter = gtk.RecentFilter() self.file_filter.add_pattern("*.pdb") self.file_filter.add_pattern("*.updb") menu_recent.set_filter(self.file_filter) # 選取以後要做的事情 menu_recent.connect("item-activated", self.select_recent_cb) # 取得在 glade 裡建立的 menuitem,然後用 set_submenu 設定。 menuitem_recent = self.builder.get_object("mi_recent_items") menuitem_recent.set_submenu(menu_recent)