Hallo,
bin Anfänger. Mein Programm sieht z.Zt. so aus:
import tkinter
farbe = "#FF00FF"
fb = 0
# Anzeigefunktion
def FarbeEingeben():
farbe = t.get()
main.config(background = farbe) #"#FF00FF"
# Farbe ändern
def FarbeAendern():
fb = fb + 1
farbe = "#F" + str(fb) + "55FF"
main.config(background = farbe) #"#FF00FF"
main.title(fb)
main = tkinter.Tk()
main.geometry('800x400')
t = tkinter.Entry(main)
t.pack()
bshow = tkinter.Button(main, text = "Anzeigen", command = FarbeEingeben)
bshow.pack()
bfarbe = tkinter.Button(main, text = "Farbe ändern", command = FarbeAendern)
bfarbe.pack()
main.mainloop()
geplant war mit dem FarbeAendern-Button bei jedem Click den Farbstring zu erhöhen. Aber ich habe ein Problem mit 'fb'.
Was mache ich falsch???
Farbe ändern mit Button-Click
Es wäre gut, wenn Du auch den Fehler posten würdest, der kommt.
Das ist das übliche Problem, dass man für GUIs eigentlich Klassendefinitionen braucht, wenn man zusätzlichen Zustand (Farbe) speichern will.
Das ist das übliche Problem, dass man für GUIs eigentlich Klassendefinitionen braucht, wenn man zusätzlichen Zustand (Farbe) speichern will.
Code: Alles auswählen
import tkinter as tk
class MainWindow(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('800x400')
self.farbe = 0x0055FF
tk.Button(self, text="Ändern", command=self.farbe_aendern).pack()
def farbe_aendern(self):
self.farbe += 0x100000
print(f"#{self.farbe:06X}")
self['background'] = f"#{self.farbe:06X}"
def main():
window = MainWindow()
window.mainloop()
if __name__ == '__main__':
main()
Danke für die schnelle Antwort!
Bei mir erscheint die Fehlermeldung: local variable 'fb' referenced before assignment.
Ziel wäre es den Farbstring bei jedem Button-Click um einen Wert zu erhöhen.
Während die Variable 'farbe' offensichtlich problemlos verarbeitet wird, führt 'fb' zum obigen Fehler.
Bei mir erscheint die Fehlermeldung: local variable 'fb' referenced before assignment.
Ziel wäre es den Farbstring bei jedem Button-Click um einen Wert zu erhöhen.
Während die Variable 'farbe' offensichtlich problemlos verarbeitet wird, führt 'fb' zum obigen Fehler.
In Python ist jede Variable, die geändert wird, eine lokale Variable. Namen die keinen neuen Wert bekommen sind Konstanten oder Funktionen, wobei man Konstanten dadurch erkennen sollte, dass sie KOMPLETT_GROSS geschrieben sind. Das `farbe` aus der dritten Zeile wird auch nie verwendet, sondern nur das lokale `farbe` in `FarbeEingeben` das den Wert von t.get() bekommt.
`fb` bekommt einen neuen Wert, ist also lokal, aber bevor es einen Wert bekommt, wird aber gefragt, was denn der aktuelle Wert ist, und der existiert noch nicht.
Wie man das Problem umgehen kann, habe ich Dir ja gezeigt.
`fb` bekommt einen neuen Wert, ist also lokal, aber bevor es einen Wert bekommt, wird aber gefragt, was denn der aktuelle Wert ist, und der existiert noch nicht.
Wie man das Problem umgehen kann, habe ich Dir ja gezeigt.