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?
OOP Fragen
@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.
``del`` auf einen Namen oder ein Attribut braucht man so gut wie nie.
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"
"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"
@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.
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
Code: Alles auswählen
self.lframe = Frame(root, name='lframe').grid()
und den "destroy"-Befehl hab ich halt bei der if-Abfrage gesetzt wenn der Login erfolgreich war
@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.
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
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
Seit gegrüßt
mal ne kurze frage an euch
Snafu hatte mal dieses Beispiel hier gepostet damit
mein "Copy&Paste" nreduziert wird
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
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
umzusetzen.
Ich hab es mal probiert bin aber daran gescheitert.
Gruß Kalli
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was hast Du denn probiert? (Code?) Und was ging schief? (Fehler? Unerwartetes Ergebnis?)Kalli87 hat geschrieben: Ich hab es mal probiert bin aber daran gescheitert.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Keine Fehlermeldung eher gar keine Ausgabe von den Entry-Feldern
so sind zur zeit meine Entry-Felder aufgebaut
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
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)
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
Hier mal ein kleines Beispiel
was ich so rekonstruieren konnte wie ichs mal
versucht hatte
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)
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)
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:
Code: Alles auswählen
data = [element]
Code: Alles auswählen
data = [
spam,
ham,
eggs]
Das Leben ist wie ein Tennisball.