Seite 3 von 3

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 12:53
von Kalli87
Mal eine bescheidene Frage dazu:

Wie kann man denn am besten den Frame "zerstören"?
Einfach wäre es ja mit "del self.frame" aber selbst da passiert bei mir nix.
Hab ich etwas übersehen?

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:06
von BlackJack
@Kalli87: Übersetze „zerstören” mal auf Englisch und schau Dir an was für Methoden Widgets so besitzen. :-)

``del`` auf einen Namen oder ein Attribut braucht man so gut wie nie.

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:13
von Kalli87
naja mit destroy() hab ichs auch schon probiert
"self.frame.destroy()"

Ergebnis war ein Error
AttributeError: 'NoneType' object has no attribute 'destroy'

Und wie der Fehler schon sagt hat das Objekt kein Attribut "destroy"

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:16
von BlackJack
@Kalli87: Aus irgendwelchen Gründen ist an `self.frame` bei Dir nicht das Wigdet sondern der Wert `None` gebunden. Du hast da also an der Stelle wo Du `self.frame` zuweist einen Fehler im Programm. Wahrscheinlich bindest Du da den Rückgabewert einer Layout-Methode des Widgets statt das Widget selber an das Attribut `frame`. Ist ein beliebter Anfängerfehler.

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:31
von Kalli87
Eigentlich simple angelegt

Code: Alles auswählen

self.lframe = Frame(root, name='lframe').grid()
Dann hat jeder Button und jedes Eingabefeld den Frame bekommen
und den "destroy"-Befehl hab ich halt bei der if-Abfrage gesetzt wenn der Login erfolgreich war

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:45
von BlackJack
@Kalli87: Da haben wir ja den Fehler. Du bindest nicht das `Frame`-Objekt an `self.lframe` sondern den Rückgabewert von dem `grid()`-Aufruf. Und der ist `None`. Und `None` hat natürlich keine `destroy()`-Methode.

Re: OOP Fragen

Verfasst: Montag 5. Januar 2015, 13:51
von Kalli87
Alles klar :)
Hab es behoben jetzt is der Frame weg und ich bin zufrieden :)

Darauf bin ich echt nicht gekommen, hatte .grid() schon weg gelassen aber da ging nix mehr
aber stimmt schon bei den den Entry-Feldern hab ichs auch in getrennt geschrieben :)

Naja wie immer den Wald vor lauter Bäumen nicht gesehen ;)

Danke

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 09:53
von Kalli87
Seit gegrüßt :)

mal ne kurze frage an euch

Snafu hatte mal dieses Beispiel hier gepostet damit
mein "Copy&Paste" nreduziert wird

Code: Alles auswählen

    def create_frame_new_customer(notebook, font='Helvetica 13 bold'):
        frame = Frame(notebook, name='tab-kunde-neu')
        label_data = [
            ('Titel', 1, 0),
            ('Name', 1, 2),
            # usw
        ]
        for text, row, column in label_data:
            Label(frame, text=text, font=font).grid(row=row, column=column)
        return frame
Mein Frage dazu ist, ob es auch möglich wäre es auch für "Entry" Felder
umzusetzen.

Ich hab es mal probiert bin aber daran gescheitert.

Gruß Kalli

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 10:08
von Hyperion
Kalli87 hat geschrieben: Ich hab es mal probiert bin aber daran gescheitert.
Was hast Du denn probiert? (Code?) Und was ging schief? (Fehler? Unerwartetes Ergebnis?)

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 10:12
von Kalli87
Keine Fehlermeldung eher gar keine Ausgabe von den Entry-Feldern

so sind zur zeit meine Entry-Felder aufgebaut

Code: Alles auswählen

self.ausgabetitel = Entry(self.tab_kunde, font=10)
self.ausgabetitel.grid(row=3, column=0, padx=5)
so is es normal und funktioniert.
Möchte aber nun das ganze, wie es Snafu gepostet hatte, umsetzen.

Ps.: Nen Beispielcode hab ich nicht mehr vorhanden da ich das ganze verworfen hatte
und mich um den anderen Code gekümmert habe. Aber ich wollte das ganze jetzt bissl
optimieren bzw. vereinfachen

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 10:35
von Kalli87
Hier mal ein kleines Beispiel
was ich so rekonstruieren konnte wie ichs mal
versucht hatte

Code: Alles auswählen

        entry_data =\
            [
                (self.ausgabetitel,10),
                (self.ausgabename,10)
            ]
        grid_data =\
            [
                (self.ausgabetitel, 3,0,5),
                (self.ausgabename,3,1,5)
            ]
        for ausgabeentry, font in entry_data:
            ausgabeentry = Entry(self.tab_kunde, font=font)
            
        for ausgabegrid, row, column, padx in grid_data:
            ausgabegrid.grid(row=row, column=column, padx=padx)

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 11:45
von Kalli87
gut hat sich erledigt ;)

Code: Alles auswählen

entry_data =\
            [
                ("self.ausgabetitel",10,3,0,5)
            ]

        for ausgabeentry, font, row, column, padx in entry_data:
            ausgabeentry = Entry(self.tab_kunde, font=font)
            ausgabeentry.grid(row=row, column=column, padx=padx)

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 11:49
von EyDu
Das ist ein sehr umständlicher Weg zum Füllen von "entry_data". Der Backslash ist in den meisten Fällen nicht nötig, da noch offene Klammern die logische Zeile fortführen. So geht es schöner:

Code: Alles auswählen

data = [element]
oder bei mehreren Elementen:

Code: Alles auswählen

data = [
    spam,
    ham,
    eggs]

Re: OOP Fragen

Verfasst: Freitag 30. Januar 2015, 11:56
von Kalli87
danke für den Hinweis
Hab gerade gemerkt das wenn ich jetzt anfange den Code
zu optimieren bzw. zu vereinfachen das sich Haufen Probleme
entstehen :?