RecentChooser

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Hat jemand ein Beispiel dafür wie man den gtk.RecentChooser einsetzt um damit ein Submenü der zuletzt geöffneten Files anzuzeigen? Habe im Internet kein Beispiel gefunden.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Einfach ein `gtk.RecentChooserMenu`-Exemplar erstellen und mit der `set_submenu()`-Methode einem Menu-Item hinzufügen.

Code: Alles auswählen

recent_menu = gtk.RecentChooserMenu()
item.set_subemenu(recent_menu)
Wenn man jetzt das "item-activated"-Signal benutzt, bekommt man heraus, welche Datei ausgewählt wurde.

Code: Alles auswählen

def on_item_activated(chooser):
    print u'Gewählt wurde', chooser.get_current_item().get_uri()

recent_menu.connect('item-activated', on_item_activated)
Jetzt kann man dem Chooser-Menü eben noch einen Filter hinzufügen.

Code: Alles auswählen

filter_ = gtk.RecentFilter()
filter_.add_pattern(u'*.spam')

recent_menu.set_filter(filter_)
Und jetzt eben bei der Öffnen-Funktion noch einbauen, dass der verwendete `gtk.RecentManager` von der geöffneten Datei etwas mitbekommt.

Code: Alles auswählen

manager = gtk.recent_manager_get_default()
manager.add_item(u'file:///tmp/eggs.spam')
Alles in allem könnte das dann so irgendwie aussehen (ohne Anspruch auf Schönheit oder Vollständigkeit).
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Na das nenne ich mal eine super Anleitung.
Vielen Dank Trundle.
Werde es in den nächsten Tagen ausprobieren.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Funktioniert super. Allerdings musste ich mir das menuitem erstmal vom UImanager holen.

Code: Alles auswählen

recent_manager = gtk.recent_manager_get_default()
recent_menu = gtk.RecentChooserMenu(recent_manager)
recent_menu.connect('item-activated', self.event_menu_recent)
filter = gtk.RecentFilter()
filter.add_pattern('*.utr')
recent_menu.set_filter(filter)
menuitem = self.uimanager.get_widget('ui/MenuBar/File/Recent')
menuitem.set_submenu(recent_menu)
Nochmals besten Dank.
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Hmm, habe leider erst jetzt bemerkt, dass der RecentChooser nur Dateiöffnungen mitbekommt, die über das Betriebssystem gelaufen sind. Anscheinend gibt es keine Möglichkeit dem RecentChooser applikatorisch geöffnete Dateien hinzu zufügen.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Wenn ich dich jetzt nicht völlig falsch verstanden habe, dann macht doch eben genau

Code: Alles auswählen

manager = gtk.recent_manager_get_default()
manager.add_item(u'file:///tmp/eggs.spam')
das, was du suchst.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
rhersel
User
Beiträge: 105
Registriert: Mittwoch 3. Dezember 2008, 11:29

Du hast mich völlig richtig verstanden; ich war nur zu blöd zum Lesen.
Das ist doch genau was ich will.
Danke
Antworten