Seite 1 von 1
Widgets zerstören
Verfasst: Mittwoch 17. Juni 2009, 12:34
von Louis19
Hallo zusammen,
Ich hab ein Problem mit einem Programm, dass ein Label zerstören soll, wenn man auf einen Button klickt. Dazu hatte ich folgendes Programm geschrieben:
Code: Alles auswählen
from Tkinter import*
fenster = Tk()
l = Label(fenster, text='lösch mich').pack()
def loschen():
l.destroy()
button = Button(fenster, text='Text löschen', command=loschen).pack()
fenster.mainloop()
Jetzt kommt aber die Fehlermeldung: AttributeError: 'NoneType' object has no attribute 'destroy'
Kann mit das wer erklären was das bedeutet oder sagen wir es richtig geschrieben werden muss ?
Viele Grüße
Lous19
Verfasst: Mittwoch 17. Juni 2009, 12:37
von EyDu
Hallo.
Selbiges gilt auch für den Button.
Dann solltest du keine *-importe machen, besser "from Tkinter import tk" und dann per "tk.Label" auf den Inhalt des Moduls zugreifen.
Außerdem sollte kein Code auf Modulebene stehen, da du dein Modul sonst nicht importieren kannst. Die globale Variable "l" ist da natürlich äußerst gruselig.
Verfasst: Mittwoch 17. Juni 2009, 12:53
von Louis19
Hey Super! Danke für die schnelle Antwort.
Programm läuft jetzt.
Gruß
Louis19
Verfasst: Mittwoch 17. Juni 2009, 13:26
von wuf
Hallo EyDu
EyDu hat geschrieben:Dann solltest du keine *-importe machen, besser "from Tkinter import tk" und dann per "tk.Label" auf den Inhalt des Moduls zugreifen.
Hier hast du sicher folgendes gemeint:
Gruss wuf

Verfasst: Mittwoch 17. Juni 2009, 13:38
von jonas
Hast du EyDu's Rat beachtet?
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter as tk
def widget_destroyer(widget):
widget.destroy()
if __name__ == '__main__':
window = tk.Tk()
window.title('WidgetDestroyer')
label_to_destroy = tk.Label(window, text='I am a label to destroy',
width=40)
label_to_destroy.pack()
# width=40 bestimmt die Anzahl der Zeichen,
# nebeneinander passen
# ist meiner meinung nach eine optische
# Verbesserung
destroybutton = tk.Button(window, text='Destroy Label',
command=lambda w=window.winfo_children()[0]:
widget_destroyer(w),
width=40)
# window.winfo_children() gibt alle 'Kinder' des Fensters
# wieder und da label_to_destroy als erstes erzeugt wurde
# hat es in der liste den index 0
destroybutton.pack()
window.mainloop()
Lg, Jonas

Verfasst: Mittwoch 17. Juni 2009, 14:02
von EyDu
wuf hat geschrieben:Hier hast du sicher folgendes gemeint:
Nee, ich benutze Python 3.0 und habe mir meine eigene Tkinter.py geschrieben...
