Label aus Klasse ändern

Fragen zu Tkinter.
Antworten
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Hallo,
ich bin ein Stück weiter in meinem Programm, benötige jedoch nochmal eure Hilfe.
Das Programm soll ein Trainingsprogramm für ein Klettertrainingsgerät sein.
In der Main Klasse werden alle Labels und Entrys erzeugt, bis jetzt hat nur der Start Button eine Funktion. Er startet die Timer Methode, dabei werden die drei Zahlen aus den Entrys übergeben.
Die Ausgabe der print Befehle erfolgt noch per Konsole, soll aber über das Label aLabel geschehen.
Hier die main Methode:

Code: Alles auswählen

import tkinter as tk
from tkinter.ttk import Combobox
#from itertools import cycle
import Timer as T


class MainWindow(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title("Trainingsprogramm fuer den Beastmaker 1000")
        #self.geometry("500x500")

        self.programmLabel = tk.Label(self, text="Programm: ")
        self.programmLabel.grid(row=0, column = 0, sticky="W")

        self.trainValues = ["easy", "normal", "hard"]

        self.trainingsProCombo = Combobox(self, values=self.trainValues,width=7)
        self.trainingsProCombo.current(0)
        self.trainingsProCombo.grid(row=0, column = 1)

        self.helpButton = tk.Button(self, text="?")
        self.helpButton.grid(row = 0, column = 2)

        self.wLabel = tk.Label(self, text="Wiederholungen: ")
        self.wLabel.grid(row=0, column = 3)

        self.wEntry = tk.Entry(self, width=5)
        self.wEntry.insert(0, "3")
        self.wEntry.grid(row = 0, column = 4)

        self.hLabel = tk.Label(self, text="Halte Zeit: ")
        self.hLabel.grid(row=0, column = 5)

        self.hEntry = tk.Entry(self, width=5)
        self.hEntry.insert(0, "7")
        self.hEntry.grid(row = 0, column = 6)

        self.pLabel = tk.Label(self, text="Pausenzeit: ")
        self.pLabel.grid(row=0, column= 7)

        self.pEntry = tk.Entry(self, width=5)
        self.pEntry.insert(0, "3")
        self.pEntry.grid(row = 0, column = 8)

        self.startButton = tk.Button(self, text="Start", width=14, command=self.startTimer)
        self.startButton.grid(row = 0, column = 9)      
        
        self.aLabel = tk.Label(self, text="Anweisung: Consolen Ausgabe", font="arial16")
        self.aLabel.grid(row = 2, columnspan=10)

    def startTimer(self):
        a = int(self.wEntry.get())
        b = int(self.hEntry.get())
        c = int(self.pEntry.get())
        Test1 = T.Timer(a,b,c).fingertimer()
        
        
def main():
    root = MainWindow()
    root.mainloop()

if __name__ == "__main__":
    main()
hier die Timer Methode

Code: Alles auswählen

import time as time


class Timer:
    
    def __init__(self, wiederholungen, halten, pause, vorbereitung=3):
        self.w = wiederholungen
        self.h = halten
        self.p = pause
        self.v = vorbereitung
        
    def fingertimer(self):
        ws = 0
        
        print("Noch 3 Sekunden...")
        
        time.sleep(self.v)
        
        print("Das Training beginnt!")
        
        for ws in range(self.w):
            print(f"Runde {ws+1}/{self.w}")
            print("Halten")
            #time.sleep(self.h)
            for i in range(self.h):
                time.sleep(1)
                print(f"Sekunden {i+1}/{self.h}")
            if ws in range(self.w-1):
                print("Pause")
                    #time.sleep(self.v)
                for j in range(self.p):
                    time.sleep(1)
                    print(f"Sekunden {j+1}/{self.p}")
            
        print("Das Training ist beendet!")
Wie bekomme ich die print Ausgaben der Timer Methode wieder in die main Methode? In meinem Buch ist das leider nicht beschreiben.. :(

Gruß Kai
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein Klasse pro Datei ist nicht sinnvoll. Also pack alles in eine Datei. Dateinamen aka Modulnamen schreibt man wie Variablen, Methoden und Attribute klein.
Benutze keine Abkürzungen. w / h / p / v? Geht's noch?
Nicht alles muß man an Attribute binden, z.B. bei allen Labels ist das unnötig.
Naja, bis auf das sehr schlecht benannte aLabel.

Statt des Timers baue die Funktion fingertimer so um, dass sie per after im MainWindow regelmäßig aufgerufen wird.
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Vielen Dank für deine Antwort.
Sirius3 hat geschrieben: Montag 27. April 2020, 19:31 Ein Klasse pro Datei ist nicht sinnvoll. Also pack alles in eine Datei. Dateinamen aka Modulnamen schreibt man wie Variablen, Methoden und Attribute klein.
Ok, bau ich um. Ich dachte immer Klassennamen schreibt man groß, und alles andere klein. Das ändere ich.
Sirius3 hat geschrieben: Montag 27. April 2020, 19:31 Benutze keine Abkürzungen. w / h / p / v? Geht's noch?
Ok änder ich auch.
Sirius3 hat geschrieben: Montag 27. April 2020, 19:31 Nicht alles muß man an Attribute binden, z.B. bei allen Labels ist das unnötig.
Was meinst du damit, das verstehe ich leider nicht.
Sirius3 hat geschrieben: Montag 27. April 2020, 19:31 Naja, bis auf das sehr schlecht benannte aLabel.
Ich kümmer mich drum.
Sirius3 hat geschrieben: Montag 27. April 2020, 19:31 Statt des Timers baue die Funktion fingertimer so um, dass sie per after im MainWindow regelmäßig aufgerufen wird.
Ok ich werde es so versuchen.

Gruß Kai
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Hallo Sirius3,
ich habe die Dateien zusammengefügt und die Variablen umbennant. Die 'after' Methode habe ich noch nicht eingebaut. Ich bin mir auch nicht sicher wie ich diese aus der 'mainMethode' aufrufbar machen soll.
Zudem sollen unterschiedliche Zeiten ablaufen z. B. 7 Sekunden halten und 3 Sekunden Pause, also bräuchte ich einmal eine 'after'-Methode die 7 Sekunden zählt und eine die nur 3 Sekunden zählt.

Edit: Beim schreiben ist mir gerade aufgefallen, das ich die Zeit ja beim ausführen der Mehtode übergeben könnte. Das probiere ich noch aus.

In den jetztigen Programm erbt die Klasse timer die Attribute von der mainMethode, ich denke das ist nötig um das 'ausgabeLabel' ändern zu können, oder?
Müsste sich das 'ausgabeLabel' nicht durch diese Zeile

Code: Alles auswählen

self.ausgabeLabel.config(self, text="Der Text im ausgabeLabel sollte sich jetzt ändern...")
in der fingertimer Methode der timer Klasse ändern ?

Hier der komplette Quellcode

Code: Alles auswählen

import tkinter as tk
from tkinter.ttk import Combobox
#from itertools import cycle
import time as time


class mainWindow(tk.Tk):
    def __init__(self):
        super().__init__()

        self.title("Trainingsprogramm fuer den Beastmaker 1000")
        #self.geometry("500x500")

        self.programmLabel = tk.Label(self, text="Programm: ")
        self.programmLabel.grid(row=0, column = 0, sticky="W")

        self.trainingsValues = ["easy", "normal", "hard"]

        self.trainingsProgrammCombo = Combobox(self, values=self.trainingsValues,width=7)
        self.trainingsProgrammCombo.current(0)
        self.trainingsProgrammCombo.grid(row=0, column = 1)

        self.hilfeButton = tk.Button(self, text="?")
        self.hilfeButton.grid(row = 0, column = 2)

        self.wiederholungsLabel = tk.Label(self, text="Wiederholungen: ")
        self.wiederholungsLabel.grid(row=0, column = 3)

        self.wiederholungsEntry = tk.Entry(self, width=5)
        self.wiederholungsEntry.insert(0, "3")
        self.wiederholungsEntry.grid(row = 0, column = 4)

        self.halteLabel = tk.Label(self, text="Halte Zeit: ")
        self.halteLabel.grid(row=0, column = 5)

        self.halteEntry = tk.Entry(self, width=5)
        self.halteEntry.insert(0, "7")
        self.halteEntry.grid(row = 0, column = 6)

        self.pauseLabel = tk.Label(self, text="Pausenzeit: ")
        self.pauseLabel.grid(row=0, column= 7)

        self.pauseEntry = tk.Entry(self, width=5)
        self.pauseEntry.insert(0, "3")
        self.pauseEntry.grid(row = 0, column = 8)

        self.startButton = tk.Button(self, text="Start", width=14, command=self.startTimer)
        self.startButton.grid(row = 0, column = 9)      
        
        self.ausgabeLabel = tk.Label(self, text="Anweisung: Consolen Ausgabe", font="arial16")
        self.ausgabeLabel.grid(row = 2, columnspan=10)

    def startTimer(self):
        a = int(self.wiederholungsEntry.get())
        b = int(self.halteEntry.get())
        c = int(self.pauseEntry.get())
        
        Test1 = timer(a,b,c).fingertimer()
        
        
class timer(mainWindow):
    
    def __init__(self, wiederholungen, halten, pause, vorbereitung=3):
        self.wiederholungen = wiederholungen
        self.halten = halten
        self.pause = pause
        self.vorbereitung = vorbereitung 
        
    def fingertimer(self):
        ws = 0
        
        print("Noch 3 Sekunden...")
        
        time.sleep(self.vorbereitung)
        
        print("Das Training beginnt!")
        
        for ws in range(self.wiederholungen):
            print(f"Runde {ws+1}/{self.wiederholungen}")
            self.ausgabeLabel.config(self, text="Der Text im ausgabeLabel sollte sich jetzt ändern...")
            print("Halten")
            #time.sleep(self.h)
            for i in range(self.halten):
                time.sleep(1)
                print(f"Sekunden {i+1}/{self.halten}")
            if ws in range(self.wiederholungen-1):
                print("Pause")
                    #time.sleep(self.v)
                for j in range(self.pause):
                    time.sleep(1)
                    print(f"Sekunden {j+1}/{self.pause}")
            
        print("Das Training ist beendet!")
        
        
def main():
    root = mainWindow()
    root.mainloop()

if __name__ == "__main__":
    main()
Gruß Kai
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Jetzt sind die ganzen Klassen falsch geschrieben. Die werden mit Mit großem Anfangsbuchstaben geschrieben. Alle Attribute dagegen klein_mit_unterstrich.
Vererbung ist falsch. `fingertimer` oder eben die entsprechend angepasste Methode, sollte einfach Teil von MainWindow sein, bzw. mehrere davon, weil da passieren ja ineinander verschachtelte Dinge, die in mehreren Methoden besser aufgehoben wären.

Code: Alles auswählen

import tkinter as tk
from tkinter.ttk import Combobox
import time

class MainWindow(tk.Tk):
    TRAININGS_VALUES = ["easy", "normal", "hard"]
    def __init__(self):
        super().__init__()
        self.title("Trainingsprogramm fuer den Beastmaker 1000")
        self.training = tk.StringVar(self, self.TRAININGS_VALUES[0])
        self.wiederholungen = tk.IntVar(self, 3)
        self.halte = tk.IntVar(self, 7)
        self.pause = tk.IntVar(self, 3)
        self.ausgabe = tk.StringVar(self, "Anweisung: Consolen Ausgabe")
  
        tk.Label(self, text="Programm: ").grid(row=0, column=0, sticky=tk.W)
        Combobox(self, values=self.TRAININGS_VALUES, width=7,
            textvariable=self.training).grid(row=0, column=1)
        tk.Button(self, text="?").grid(row=0, column=2)
        tk.Label(self, text="Wiederholungen: ").grid(row=0, column=3)
        tk.Entry(self, width=5, textvariable=self.wiederholungen).grid(row=0, column=4)
        tk.Label(self, text="Halte Zeit: ").grid(row=0, column=5)
        tk.Entry(self, width=5, textvariable=self.halte).grid(row=0, column=6)
        tk.Label(self, text="Pausenzeit: ").grid(row=0, column=7)
        tk.Entry(self, width=5).grid(row=0, column=8)
        tk.Button(self, text="Start", width=14, command=self.start_timer).grid(row=0, column=9)      
        tk.Label(self, textvariable=self.ausgabe, font="arial16").grid(row=2, columnspan=10)
  
    def start_timer(self):
        self.ausgabe.set("Noch 3 Sekunden...")
        self.after(3000, self.run)
  
    def run(self):
        self.ausgabe.set("Das Training beginnt!")

def main():
    root = mainWindow()
    root.mainloop()

if __name__ == "__main__":
    main()
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Ok, ich denke jetzt habe ich es endlich verstanden.
Dein Programm sieht viel kompakter aus. Vielen Dank.

Hat es irgendwelche Nachteile, das ich die Entry und Labels an Attributnamen gebunden habe ?

Gruß Kai
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Nachteil ist die Unübersichtlichkeit.
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Guten Morgen,
ich habe ein wenig Zeit um mich wieder um mein Programm zu kümmern. Leider bin ich nicht wirklich weiter gekommen. Die Ausgabe aus Label klappt einfach nicht, oder ich bin zu blöd das zu durchschauen.
Dein (Sirius3) bildet die Grundlage, diese Version ist um 2 Ausgabelabe erweitert worden.

Code: Alles auswählen

import tkinter as tk
from tkinter.ttk import Combobox
import time


class MainWindow(tk.Tk):
    
    TRAININGS_VALUES = ["easy", "normal", "hard"]
    
    def __init__(self):
        super().__init__()
        
        self.title("Trainingsprogramm fuer den Beastmaker 1000")
        self.training = tk.StringVar(self, self.TRAININGS_VALUES[0])
        
        self.wiederholungen = tk.IntVar(self, 3)
        
        self.halte = tk.IntVar(self, 2)
        
        self.pause = tk.IntVar(self, 1)
        
        self.ausgabeRunde = tk.StringVar(self, "Runde [Y/X]")
        
        self.ausgabeAnweisung = tk.StringVar(self, "Anweisung")
        
        self.ausgabeZeit = tk.StringVar(self, "[Y/X] Sek")
  
        tk.Label(self, text="Programm: ").grid(row=0, column=0, sticky=tk.W)
        
        Combobox(self, values=self.TRAININGS_VALUES, width=7,
            textvariable=self.training).grid(row=0, column=1)
            
        tk.Button(self, text="?").grid(row=0, column=2)
        
        tk.Label(self, text="Wiederholungen: ").grid(row=0, column=3)
        
        tk.Entry(self, width=5, textvariable=self.wiederholungen).grid(row=0, column=4)
        
        tk.Label(self, text="Halte Zeit: ").grid(row=0, column=5)
        
        tk.Entry(self, width=5, textvariable=self.halte).grid(row=0, column=6)
        
        tk.Label(self, text="Pausenzeit: ").grid(row=0, column=7)
        
        tk.Entry(self, textvariable=self.pause, width=5).grid(row=0, column=8)
        
        tk.Button(self, text="Start", width=10, command=self.start_timer).grid(row=0, column=9) 
             
        tk.Label(self, textvariable=self.ausgabeRunde, font="arial16").grid(row=2, columnspan=10)
        
        tk.Label(self, textvariable=self.ausgabeAnweisung, font="arial16").grid(row=3, columnspan=10)
  
        tk.Label(self, textvariable=self.ausgabeZeit, font="arial16").grid(row=4, columnspan=10)
        
         
    def start_timer(self):
        self.ausgabeAnweisung.set("Noch 3 Sekunden...")
        self.after(2000, self.run)
  
    def run(self):
        self.ausgabeAnweisung.set("Das Training beginnt!")
        self.after(1000, self.runde)
        
    def runde(self):
        wiederholungen = self.wiederholungen.get()
        wiederholungenIteration = 0
        
        def rundeAusgabe(self):
            self.ausgabeRunde.set(f"Runde [{wiederholungenIteration+1}/{wiederholungen}]")
            
        for wiederholungIteration in range(wiederholungen):
            print(f"Runde [{wiederholungenIteration+1}/{wiederholungen}]")
            wiederholungenIteration = wiederholungenIteration + 1
            self.after(1000, self.rundeAusgabe)
  
def main():
    root = MainWindow()
    root.mainloop()

if __name__ == "__main__":
    main()
Die Idee dahinter: Beim Klick auf Start wird erst start_timer dann run dann runde ausgeführt. Die Methode runde soll die wiederholungen aus dem Textfeld einlesen und die Schleife solange durchgehen bis diese erreicht werden. Dabei soll sie zum Testen alle 1 Sekunde die Ausgabe in [1/3], [2/3] [3/3] ändern.
Dafür habe ich eine Funktion 'rundeAusgabe' in runde erstellt. Ich kann diese leider nicht aufrufen. Ich bekomme immer diese Meldung AttributeError: '_tkinter.tkapp' object has no attribute 'rundeAusgabe'

Ist die Idee der verschachtelten Funktion so richtig, anders kann ich mir das nicht mit der after-Funktion vorstellen.

Gruß Kai
Sirius3
User
Beiträge: 18289
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast ja immer noch eine for-Schleife.

Code: Alles auswählen

    def run(self):
        self.ausgabeAnweisung.set("Das Training beginnt!")
        self.wiederholungen_iteration = 0
        self.after(1000, self.runde)
        
    def runde(self):
        wiederholungen = self.wiederholungen.get()
        self.wiederholungen_iteration += 1
        self.ausgabeRunde.set(f"Runde [{self.wiederholungen_iteration}/{wiederholungen}]")
        if self.wiederholungen_iteration < wiederholungen:
            self.after(1000, self.runde)
Benutzeravatar
__blackjack__
User
Beiträge: 14087
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Kahnbein.Kai: Das `time`-Modul wird importiert aber nicht verwendet.

Warum ist denn in der `__init__()` jede zweite Zeile eine Leerzeile?

Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

`rundeAusgabe()` ist als lokale Funktion in der `runde()`-Methode definiert. Natürlich gibt es die dann nicht auf dem Objekt. Wenn das eine Methode sein soll, muss die in der Klasse definiert werden, wie die anderen Methoden auch.

Dann sind natürlich `wiederholungen` und `wiederholungIteration` undefininiert. Alles was Funktionen und Methoden ausser Konstanten benötigen wird als Argument(e) übergeben.

`wiederholungenIteration` vor der Schleife zu initialisieren, in der Schleife manuell hochzuzählen, und die Laufvariable der Schleife, die genau diesen Wert doch bereits zur Verfügung stellt, macht keinen Sinn.

Allerdings geht das mit der Schleife sowieso nicht. Das ist doch schon die ganze Zeit das Thema hier, das man so etwas nicht mit einer Schleife machen kann, sondern das man dafür die `after()`-Methode braucht und damit und einem Aufruf pro Schleifendurcjlauf die Schleife *ersetzt*.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import tkinter as tk
from tkinter.ttk import Combobox


class MainWindow(tk.Tk):

    TRAININGS_VALUES = ["easy", "normal", "hard"]

    def __init__(self):
        super().__init__()

        self.title("Trainingsprogramm fuer den Beastmaker 1000")
        self.training = tk.StringVar(self, self.TRAININGS_VALUES[0])
        self.wiederholungen = tk.IntVar(self, 3)
        self.halte = tk.IntVar(self, 2)
        self.pause = tk.IntVar(self, 1)
        self.ausgabe_runde = tk.StringVar(self, "Runde [Y/X]")
        self.ausgabe_anweisung = tk.StringVar(self, "Anweisung")
        self.ausgabe_zeit = tk.StringVar(self, "[Y/X] Sek")

        tk.Label(self, text="Programm: ").grid(row=0, column=0, sticky=tk.W)
        Combobox(
            self,
            values=self.TRAININGS_VALUES,
            width=7,
            textvariable=self.training,
        ).grid(row=0, column=1)
        tk.Button(self, text="?").grid(row=0, column=2)
        tk.Label(self, text="Wiederholungen: ").grid(row=0, column=3)
        tk.Entry(self, width=5, textvariable=self.wiederholungen).grid(
            row=0, column=4
        )
        tk.Label(self, text="Halte Zeit: ").grid(row=0, column=5)
        tk.Entry(self, width=5, textvariable=self.halte).grid(row=0, column=6)
        tk.Label(self, text="Pausenzeit: ").grid(row=0, column=7)
        tk.Entry(self, textvariable=self.pause, width=5).grid(row=0, column=8)
        tk.Button(self, text="Start", width=10, command=self.start_timer).grid(
            row=0, column=9
        )
        font = "Arial 16"
        tk.Label(self, textvariable=self.ausgabe_runde, font=font).grid(
            row=2, columnspan=10
        )
        tk.Label(self, textvariable=self.ausgabe_anweisung, font=font).grid(
            row=3, columnspan=10
        )
        tk.Label(self, textvariable=self.ausgabe_zeit, font=font).grid(
            row=4, columnspan=10
        )

    def start_timer(self):
        self.ausgabe_anweisung.set("Noch 3 Sekunden...")
        self.after(2000, self.run)

    def run(self):
        self.ausgabe_anweisung.set("Das Training beginnt!")
        self.after(1000, self.runde, 1)

    def runde(self, iteration):
        wiederholungen = self.wiederholungen.get()
        text = f"Runde [{iteration}/{wiederholungen}]"
        print(text)
        self.ausgabe_runde.set(text)
        if iteration != wiederholungen:
            self.after(1000, self.runde, iteration + 1)


def main():
    root = MainWindow()
    root.mainloop()


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Kahnbein.Kai
User
Beiträge: 104
Registriert: Mittwoch 24. Juni 2015, 14:12
Wohnort: Bochum

Sirius3 hat geschrieben: Sonntag 10. Mai 2020, 08:37 Du hast ja immer noch eine for-Schleife.

Code: Alles auswählen

    def run(self):
        self.ausgabeAnweisung.set("Das Training beginnt!")
        self.wiederholungen_iteration = 0
        self.after(1000, self.runde)
        
    def runde(self):
        wiederholungen = self.wiederholungen.get()
        self.wiederholungen_iteration += 1
        self.ausgabeRunde.set(f"Runde [{self.wiederholungen_iteration}/{wiederholungen}]")
        if self.wiederholungen_iteration < wiederholungen:
            self.after(1000, self.runde)
            
Ok, so klappt es, ich denke jetzt habe ich verstanden wie man es umsetzen kann. Vielen Dank für die erneute Hilfe. Jedoch habe ich dazu eine Frage.
Die Variable 'self.wiederholung_iteration' wird in der Methode 'run' definiert. Sie ist somit lokal und nur in der Methode 'run' aufrufbar, bzw. verwendbar.
Warum kann die Methode 'runde' auf die Variable 'self.wiederholung_iteration' zugreifen ?

Ich habe es in einem anderen Script versucht, da kann ich nicht auf die Variabel zugreifen die ich in einer anderen Methode definiert habe.


Dir auch vielen Dank für dein Code, werde ich mir auch noch anschauen, diese Lösung ist ja sehr anders.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 @Kahnbein.Kai: Das `time`-Modul wird importiert aber nicht verwendet.
Oh, tut mir leid, das ist ein Rest aus einem alten Stand, das hat dort nichts mehr zu suchen.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 Warum ist denn in der `__init__()` jede zweite Zeile eine Leerzeile?
Als Anfänger, bilde ich mir ein das es was zur Lesbarkeit des Codes beiträgt, ich komme damit recht gut zurecht.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 Namen werden in Python klein_mit_unterstrichen geschrieben. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
ok, dann verwende ich jetzt diese Notation anstatt CamelCase.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 `rundeAusgabe()` ist als lokale Funktion in der `runde()`-Methode definiert. Natürlich gibt es die dann nicht auf dem Objekt. Wenn das eine Methode sein soll, muss die in der Klasse definiert werden, wie die anderen Methoden auch.
ok
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 Dann sind natürlich `wiederholungen` und `wiederholungIteration` undefininiert. Alles was Funktionen und Methoden ausser Konstanten benötigen wird als Argument(e) übergeben.
ok, ist in deinem Code ja auch so.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 `wiederholungenIteration` vor der Schleife zu initialisieren, in der Schleife manuell hochzuzählen, und die Laufvariable der Schleife, die genau diesen Wert doch bereits zur Verfügung stellt, macht keinen Sinn.
ok, stimmt, habe ich vergessen, die Schleife zählt ja automatisch hoch.
__blackjack__ hat geschrieben: Sonntag 10. Mai 2020, 10:32 Allerdings geht das mit der Schleife sowieso nicht. Das ist doch schon die ganze Zeit das Thema hier, das man so etwas nicht mit einer Schleife machen kann, sondern das man dafür die `after()`-Methode braucht und damit und einem Aufruf pro Schleifendurcjlauf die Schleife *ersetzt*.
Ja du hast recht, ich war wieder auf dem Holzweg.

Gruß Kai
Antworten