AttributeError: Aber ich bin mir sicher!

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
start_with_python
User
Beiträge: 41
Registriert: Samstag 20. Juni 2009, 18:12

Guten Morgen!

Ich bastele nun ein wenig mit GTK rum. Es gefällt mir. Erste Versuche führten direkt zum Erfolg.

Ich hänge bei der einfachen Abfrage eines Textfelds. Was muss ich denn Abfragen? Ich bilde mir ein, dem Tutorial auf WikiBooks gefolgt zu sein.

Die test2.xml habe ich mit Glade erstellt. Das Textfeld mit dem Namen "entry1" existiert auch garantiert (Textfeld Eigenschaften->Allgemein->Name).
AttributeError: TutorialTextEditor instance has no attribute 'entry1'

Code: Alles auswählen

class TutorialTextEditor:

    def __init__(self):

        builder = gtk.Builder()
        builder.add_from_file("test2.xml")
        self.window = builder.get_object("window")
        builder.connect_signals(self)
        self.window.connect("delete_event", self.on_window_destroy)
        self.window.connect("destroy", self.destroy)
        self.window.set_title("Wir füllen den Titel! Auch wie ist das lustig!")

    def on_window_destroy(self, widget, data=None):
        print "Nutzer geht ins Bett..."
        gtk.main_quit()

    def destroy(self, widget):
        print "Schlaf schön!"
        gtk.main_quit()

    def on_button2_clicked(self, data=None):
        text = self.entry1.get_text()
        self.window.set_title(text)

if __name__ == "__main__":
    editor = TutorialTextEditor()
    editor.window.show()
    gtk.main()
Was übersehe ich?
Grüße und gute Nacht!
Grüße[b]
start_with_python[/b]

Lust auf [url=https://www.dropbox.com/referrals/NTE5OTQ5Mjk5]DropBox[/url]? (RefLink)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schonmal ``builder.get_object("entry1")`` versucht? Schließlich bindest du nirgendwo ``entry1`` an deine Klasse und GTK+ macht das natürlich nicht automatisch (warum auch).

Übrigens als Tipp: Erbe von ``object``, dann hast du gleich New-Style-Klassen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
start_with_python
User
Beiträge: 41
Registriert: Samstag 20. Juni 2009, 18:12

Leonidas hat geschrieben:Schonmal ``builder.get_object("entry1")``
Ja, das war es!
Gibt es da eine Möglichkeit alle Objekte mit einem mal festzulegen? Oder muss ich tatsächlich jedes einzelne so festlegen?
Grüße[b]
start_with_python[/b]

Lust auf [url=https://www.dropbox.com/referrals/NTE5OTQ5Mjk5]DropBox[/url]? (RefLink)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Normalerweise will man nicht jedes einzelne Widget an einen Namen binden, da reicht es doch, wenn man nur die bindet, die man haben will. Ggf. kann man aber mit ``get_objects()`` sich das etwas automatisieren lassen. Würde ich aber persönlich nicht machen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
start_with_python
User
Beiträge: 41
Registriert: Samstag 20. Juni 2009, 18:12

Ok, danke!
Grüße[b]
start_with_python[/b]

Lust auf [url=https://www.dropbox.com/referrals/NTE5OTQ5Mjk5]DropBox[/url]? (RefLink)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Code: Alles auswählen

class Window(gtk.Window):
     def __getattr__(self, name):
         return self.widget_tree.get_widget(name)
Damit hast du Zugriff auf die Widgets auch ohne get_widget(foo).

Da gabs doch mal so eine Metaklasse... *rauskram* Achja, der hier wars.

Gruß
Antworten