Wie kann ich eine Variabel in der "def" funktion nutzen (Python)?
Hallo,
ich bin neu bei Python und möchte ein kleines Programm machen, indem man auf einen Knopf drückt und eine Zahl immer größer wird. Dies funktioniert nicht und ich habe im Internet keine Lösung gefunden. Hier ist der Code:
import tkinter as tk
number = 0
def click_message():
number = number + 1
label1.configure(text="The Button was pressed " + number + "times")
print(n)
root = tk.Tk()
root.geometry("400x400")
root.resizable(width=False, height=False)
root.title("Tkinter-Test-Programm")
label1 = tk.Label(text="The Button was not pressed!")
label1.pack()
button1 = tk.Button(text="Click me!", command=click_message)
button1.pack()
root.mainloop()
Soweit läuft alles gut, aber die Variable "number" kann nicht in der "def" Funktion genutzt werden. Es kommt zur folgenen Fehlermeldung:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\"Benutzername"\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
return self.func(*args)
File "C:\Users\"Benutzername"\PycharmProjects\Test\main.py", line 7, in click_message
n = n + 1 <--- (Das soll in der "def" Funktion passieren, was es aber nicht tut!)
UnboundLocalError: local variable 'n' referenced before assignment
Wenn mir jemand den funktionierenden Code schicken könnte wäre ich sehr dankbar! LG
3 Antworten
Mit dem global keyword.
Die variable existiert derzeit nur im äußeren scope.
Wenn du in deiner Funktion als erstes:
global number
schreibst, dann ist die variable dort verfügbar.
Also schreibe ich vor der def Funktion "global n = n + 1" oder schreibe ich
"global n = 0" ?
Danke im voraus :D
Ich habe ein wenig herumexperimentiert und es funktioniert nun. Vielen dank!
def click_message(number):
number = number + 1
label1.configure(text="The Button was pressed " + number + "times")
print(number)
Ich habe in diesem Programm drei Fehler gefunden.
- du gibst in Zeile 8 die Variable n aus die nicht existiert (ich glaube du meintest number)
- in Zeile 6 fehlt ein global
- in Zeile 6 muss die integer Variable in einen String konvertiert werden
Korrigierte Funktion:
def click_message():
global number
number += 1
label1.configure(text="The Button was pressed " + str(number) + "times")
print(number)
Nach dem Beheben dieser Fehler funktioniert das Programm bei mir.