GUI - Anfänger Frage

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dave_420
User
Beiträge: 3
Registriert: Sonntag 7. März 2021, 12:13

from tkinter import *

root = Tk()
root.title("Test")

day = 1

def next_day():
label1["text"]+= 1

button1 = Button(root,text="next day",command=lambda: (next_day)).grid(row=0,column=0)
label1 = Label(root,text=tag).grid(row=1,column=0)

root.mainloop()


Warum geht es nicht den tag um 1 zu erhöhen, wenn ich auf den next day button klicke passiert nichts?
Benutzeravatar
Dennis89
User
Beiträge: 1555
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

zu was das 'lambda' ? Selbst wenn beim klicken des Buttons die Funktion 'next_day' aufgerufen wird Dann kannst du einen nicht definierten Namen nicht einfach um eins erhöhen. 'label1' ist in der Funktion 'next_day' nicht das gleiche wie in dein "anderes" 'label1'. Du musst dich mit dein Einrückungen und entstehenden Namensräumen vertraut machen. 'tag' in 'label1 = Label(root, text=tag)' ist auch nicht definiert.

Wenn du so etwas machen willst, dann bietet sich objektorienterte Programmierung an. Da kannst du den Namen an 'self' binden und wieder darauf zugreifen. Arbeite am besten mal das offizielle Python-Tutorial durch:
https://docs.python.org/3/tutorial/

Code: Alles auswählen

#!/usr/bin/env python3

import tkinter as tk


class App(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.day = 1
        tk.Button(self, text='Update Day', command=self.update_day).grid(row=0, column=0)
        self.day_label = tk.Label(self,text=self.day)
        self.day_label.grid(row=1, column=0)
             
    def update_day(self):
        self.day += 1
        self.day_label.configure(text=self.day)
        
        
def main():
    root = tk.Tk()
    root.title('Days')
    app = App(root)
    app.pack()
    app.mainloop()

if __name__ == "__main__":
    main()
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten