Label. Config funktioniert nicht

Fragen zu Tkinter.
Antworten
Mister
User
Beiträge: 36
Registriert: Freitag 24. Januar 2020, 21:58

Hi
Ich habe ein Problem dass schon öfter aufgetreten ist aber finde die Ursache nicht. Ich möchte mit einem Button den Inhalt eines Labels ändern aber es geht nicht Der Code:

Code: Alles auswählen

import tkinter as t
def schreibenShell():
    print("text")
def schreibenLabel():
    label.config(text="text")
window=t.Tk()
label=t.Label(window,text="").pack()
button=t.Button(window,text="text in die shell",command=schreibenShell).pack()
buttonn=t.Button(window,text="text ins Label",command=schreibenLabel).pack()
window.mainloop()
Es heisst "none type object has no attribute config"
Warum? Ich dachte man könnte so auf alle widget Objekte zugreifen?
Danke für Antworten
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das liegt daran, dass du denkst, pack() wuerde das Widget zurueckliefern. Tut es nicht. Es liefert None. Du musst also die Erzeugung von Buttons und deren packing voneinander trennen.
Mister
User
Beiträge: 36
Registriert: Freitag 24. Januar 2020, 21:58

Also ich habe das jetzt so:

Code: Alles auswählen

import tkinter as t
def schreibenShell():
    print("text")
def schreibenLabel():
    label.config(text="text")
window=t.Tk()
label=t.Label(window,text="").pack()
button=t.Button(window,text="text in die shell",command=schreibenShell)
buttonn=t.Button(window,text="text ins Label",command=schreibenLabel)
button.pack()
buttonn.pack()
window.mainloop()
Gemacht aber es hat sich nix geändert
Mister
User
Beiträge: 36
Registriert: Freitag 24. Januar 2020, 21:58

Ach so ich hab vergessen das packing vom Label auch noch extra zu machen, jetzt klappt es.
Danke
Mister
User
Beiträge: 36
Registriert: Freitag 24. Januar 2020, 21:58

Ich habe aber noch eine Frage: Manchmal definiere ich am Anfang meines Codes eine Funktion und danach eine Fenster mit einem Knopf der diese Funktion aufrufen soll.
Manchmal passiert es aber, dass diese funktion sofort beim Start des Programme ausgeführt wird. Kann jmd sagen warum das so sein kann?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne etwas zu sehen kann man das nicht abschliessend beurteilen, aber du machst eh einen Fehler wenn du Code direkt auf Modulebene ausfuehrst. So wie du das eben machst. Das gehoert *ALLES* sauber in Funktionen, und nur gaaaaanz am Ende sollte der Aufruf einer einzigen Funktion stehen, gesichert durch den __main__-Guard.

Code: Alles auswählen

if __name__  == "__main__":
     main()
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

@Mister klingt als würdest du der Funktion die () mitgeben. Dann wird sie ausgeführt und nicht nur der Verweis auf die Funktion.
Antworten