Ok, hier ist die Version A, ich möchte das Programm "optimieren", sodass nicht mehr jede Funktion 'run' und 'unterbrechung' selbst "Zählt" und die Ausgabe aktualisiert.
Code: Alles auswählen
import tkinter as tk
class Programm(tk.Tk):
def __init__(self):
super().__init__()
self.title("Test Ablaufprogramm")
self.runde = tk.IntVar(self, 3)
self.arbeit = tk.IntVar(self, 4)
self.pause = tk.IntVar(self, 2)
self.ausgabe = tk.StringVar(self, "Ausgabe")
tk.Label(self, text='Runden:').grid(row=0,column=2)
tk.Entry(self,width=5, textvariable=self.runde).grid(row=0, column=3)
tk.Label(self, text='Arbeit:').grid(row=0,column=4)
tk.Entry(self,width=5, textvariable=self.arbeit).grid(row=0, column=5)
tk.Label(self, text='Pause:').grid(row=0,column=6)
tk.Entry(self,width=5, textvariable=self.pause).grid(row=0, column=7)
tk.Label(self, textvariable=self.ausgabe).grid(row=2,columnspan=8)
tk.Button(self, text="Start", width=10, command=self.start).grid(row=3, columnspan=8)
self.zählerRunde = 0
def start(self):
self.zählerArbeit = 0
self.zählerPause = 0
self.zählerRunde += 1
self.run()
def run(self):
if self.zählerRunde < self.runde.get():
if self.zählerArbeit < self.arbeit.get()+1:
self.ausgabe.set(f"Runde: {self.zählerRunde} / {self.runde.get()} Arbeit {self.zählerArbeit} / {self.arbeit.get()}")
self.after(1000, self.run)
self.zählerArbeit += 1
else:
self.unterbrechnung()
else:
if self.zählerArbeit < self.arbeit.get()+1:
self.ausgabe.set(f"Runde: {self.zählerRunde} / {self.runde.get()} Arbeit {self.zählerArbeit} / {self.arbeit.get()}")
self.after(1000, self.run)
self.zählerArbeit += 1
else:
self.reset()
def unterbrechnung(self):
if self.zählerPause < self.pause.get()+1:
self.after(1000, self.unterbrechnung)
self.ausgabe.set(f"Runde: {self.zählerRunde} / {self.runde.get()} Pause {self.zählerPause} / {self.pause.get()}")
self.zählerPause += 1
else:
self.start()
def reset(self):
self.ausgabe.set("Ausgabe")
self.zählerRunde = 0
Soweit bin ich im "optimierten" Code
Code: Alles auswählen
import tkinter as tk
class Programm(tk.Tk):
def __init__(self):
super().__init__()
self.title("Test Ablaufprogramm")
self.runde = tk.IntVar(self, 3)
self.arbeit = tk.IntVar(self, 4)
self.pause = tk.IntVar(self, 2)
self.ausgabe = tk.StringVar(self, "Ausgabe")
tk.Label(self, text='Runden:').grid(row=0,column=2)
tk.Entry(self,width=5, textvariable=self.runde).grid(row=0, column=3)
tk.Label(self, text='Arbeit:').grid(row=0,column=4)
tk.Entry(self,width=5, textvariable=self.arbeit).grid(row=0, column=5)
tk.Label(self, text='Pause:').grid(row=0,column=6)
tk.Entry(self,width=5, textvariable=self.pause).grid(row=0, column=7)
tk.Label(self, textvariable=self.ausgabe).grid(row=2,columnspan=8)
tk.Button(self, text="Start", width=10, command=self.start).grid(row=3, columnspan=8)
self.zählerRunde = 0
def start(self):
self.zählerRunde += 1
if self.zählerRunde <= self.runde.get():
self.zählerUni = 0
self.zählerGlobal("Arbeit", self.arbeit.get())
def zählerGlobal(self, text, Zeit):
if self.zählerUni < Zeit:
self.ausgabe.set(f"Runde: {self.zählerRunde} / {self.runde.get()} {text} {self.zählerUni+1} / {Zeit}")
self.zählerUni += 1
self.after(1000,self.zählerGlobal)
Mein Problem ist die letzte Zeile, hier kommt die Fehlermeldung da zwei Argumente benötigt werden. Die Parameter in der Methode Start sind aber nicht die einzigen es gibt noch andere. Daher kann ich die letzte Zeile nicht in
Code: Alles auswählen
self.after(1000, self.zählerGlobal("Arbeit", self.arbeit.get()))
ändern.
Ich weiß nicht wie ich die Methode rekursiv aufrufen soll und die Parameter nur einmal übergeben muss.
Gruß Kai