Seite 1 von 1

FileChooserDialog in GTK-Anwendung

Verfasst: Donnerstag 28. Februar 2008, 07:18
von Jochen Skulj
Hallo,

da ich momentan nicht weiterkomme, wage ich es einmal, hier meine Anfängerfrage zu stellen:

Aufgabenstellung ist simpel: nach Auswahl eines Menüpunktes soll ein Dateiauswahldialog erscheinen und danach die Datei geöffnet werden. Mein Source-Code dazu:

Code: Alles auswählen

    def execute(self, widget, data = None):
        """
        executes the command. This method has to be overwritten 
        in sublclasses. 
        Parameters:
            - widget: widget that triggers the command
            - data: additional data
        """
        chooser = gtk.FileChooserDialog("Open", self.getApplication().getMainWindow()) 
        chooser.set_default_response(gtk.RESPONSE_OK)
        chooser.add_button( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
        chooser.add_button( gtk.STOCK_OPEN, gtk.RESPONSE_OK)
        filter = gtk.FileFilter()
        filter.set_name("File")
        filter.add_pattern("*.xml")
        chooser.add_filter(filter)
        response = chooser.run()
        if response == gtk.RESPONSE_OK:
            print chooser.get_filename(), 'selected'
Die Methode execute wird an anderer Stelle mit dem activate-Signal eines MenuItems verbunden. Das Ganze läuft in einer übergeordneten Anwenung, die mit gtk.main() gestartet wird.

Das klappt auch insofern, als der FileChooser geöffnet wird. Allerdings schließt er sich nicht, wenn man auf Ok oder Abbrechen klickt. Das ist mein Problem.

Führe ich das Code-Fragment in einem eigenen kleinen Programm/Skript aus, ohne dass darin vorher gtk.main() aufgerufen wird, funktioniert das bestens.

Wo ist mein Denkfehler?

Danke, Jochen

Verfasst: Donnerstag 28. Februar 2008, 11:53
von Trundle
Der Aufrufer der `run'-Methode muss selber dafür sorgen, dass der Dialog, nachdem die Methode zurückkehrt, versteckt oder zerstört wird. Also einfach noch ein

Code: Alles auswählen

chooser.destroy()
am Ende einbauen.

Verfasst: Donnerstag 28. Februar 2008, 16:48
von Jochen Skulj
Super, vielen Dank für die Antwort. Die hat mir sehr geholfen.

Besten Gruß, Jochen