Probleme mit GtkBuilder und zusätzlichem Dialog

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
pyro
User
Beiträge: 4
Registriert: Dienstag 23. September 2008, 18:51

Hallo,

ich bin gerade dabei, eine Anwendung mit PyGTK und Glade3 zu entwickeln. Ich habe dazu ein MainWindow in Glade zusammengestellt und einen zusätzlichen Dialog, mit dem man eine "Workgroup" auswählen kann (Das ganze soll eine GUI für Samba werden).

Auf dem Dialog sind die 2 Buttons in der Action-Area (btn_ok und btn_cancel) sowie ein Button in der Content-Are (btn_search). So zeige ich den Dialog im MainWindow an:

Code: Alles auswählen

    def on_btn_add_clicked(self, widget, data=None):
        self.add_workgroup_dialog = AddWorkgroupDialog(self)
        response_id = self.add_workgroup_dialog.dialog.run() 
        self.add_workgroup_dialog.dialog.hide()

        print "Chosen answer: " + str(response_id)
Der Klasse AddWorkgroupDialog sieht so aus:

Code: Alles auswählen

class AddWorkgroupDialog(object):

    def __init__(self, main_window):
        self.signals = {
            'on_btn_ok_clicked': self.on_btn_ok_clicked,
            'on_btn_cancel_clicked': self.on_btn_cancel_clicked,
            'on_btn_search_clicked': self.on_btn_search_clicked
        }
        main_window.builder.connect_signals(self.signals)
        
        self.dialog = main_window.builder.get_object('add_workgroup_dialog')

    def on_btn_ok_clicked(self, widget, data=None):
        print "Ok was clicked"
        self.dialog.response(gtk.RESPONSE_OK)

    def on_btn_cancel_clicked(self, widget, data=None):
        print "Cancel was clicked"
        self.dialog.response(gtk.RESPONSE_CANCEL)

    def on_btn_search_clicked(self, widget, data=None):
        print "Search was klicked"
Das Problem dass ich habe:
Meine Commandhandler für die 3 Buttons reagieren nicht, wenn ich auf die Buttons klicke. Funktioniert das Verbinden der Signale über GtkBuilder nicht? Muss ich die Signale manuell mit connect verbinden?

Und dann habe ich noch eine allgemeine Frage zu connect_signals. Ist es irgendwie möglich, nur die Signale eines bestimmten Windows zu verbinden? Ich finde es nämlich nicht gerade schön, wenn connect_signals() Warnungen wirft, weil die Signale des Dialogs keine CommandHandler in der MainWindow-Klasse haben. Oder ist die beste Lösung hierzu wirklich, für jedes Fenster ein eigenes Glade-File anzulegen?

Gruß pyro
Antworten