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
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:
oder bei mehreren Elementen:
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
