Trainingsuhr mit tkinter

Fragen zu Tkinter.
Antworten
frcom
User
Beiträge: 21
Registriert: Sonntag 24. September 2017, 19:35

Mittwoch 3. Januar 2018, 17:22

Hallo Allerseits!

Ich versuche mich gerade dabei eine Trainingsuhr in Python mit tkinter zu schreiben. Mein Skript sieht bisher wie folgt aus:

Code: Alles auswählen

from tkinter import ttk
from tkinter import *

fenster = Tk()
fenster.title("Trainingshelfer, Beine")

def weitercom():
	fenster2 = Tk()
	fenster2.title("Trainingsuhr")
	
	def start():
		#hier scheitere ich
		
	anzeige_1 = Label(fenster2, text=("Training: ", count_1))
	anzeige_2 = Label(fenster2, text=("Pause: ", count_2))
	
	count = dauer.get()

	pause_t = Label(fenster2, text="Pause: ")
	pause_a = Label(fenster2, text=(pause.get(), "sek."))
	dauer_t = Label(fenster2, text="Dauer: ")
	dauer_a = Label(fenster2, text=(dauer.get(), "sek."))
	sets_t = Label(fenster2, text="Anzahl Sätze: ")
	sets_a = Label(fenster2, text=sets.get())
	
	start_uhr = Button(fenster2, text="Start", command=start)
	exit_uhr = Button(fenster2, text="exit", command=fenster2.quit)
	
	pause_t.grid(row=0, column=0)
	pause_a.grid(row=0, column=1)
	dauer_t.grid(row=1, column=0)
	dauer_a.grid(row=1, column=1)
	sets_t.grid(row=2, column=0)
	sets_a.grid(row=2, column=1)
	
	anzeige_1.grid(row=3, column=0)
	anzeige_2.grid(row=4, column=0)
	
	start_uhr.grid(row=5, column=0)
	exit_uhr.grid(row=5, column=1)
	
	fenster2.mainloop()

info = Label(fenster, text="Selbsterklärend:")

#Schieberegler Dauer
label_dauer = Label(fenster, text="Belastungsdauer auswählen: ")
dauer = Scale(fenster, from_=10, to=70, orient=HORIZONTAL)
#Schieberegler Pause
label_pause = Label(fenster, text="Pausenlänge auswählen: ")
pause = Scale(fenster, from_=0, to=30, orient=HORIZONTAL)
#Schieberegler Sets
label_sets = Label(fenster, text="Sets auswählen: ")
sets = Scale(fenster, from_=1, to=10, orient=HORIZONTAL)

#Buttons
weiter = Button(fenster, text="weiter", command=weitercom)
exit = Button(fenster, text="Exit", command=fenster.quit)

label_dauer.grid(row=0, column=0)
dauer.grid(row=0, column=1)
label_pause.grid(row=1, column=0)
pause.grid(row=1, column=1)
label_sets.grid(row=2, column=0)
sets.grid(row=2, column=1)
weiter.grid(row=3, column=0)

fenster.mainloop()
Ich kann also über Schieberegler Dauer, Pause und Anzahl der Sätze einstellen, das wichtigste, die Uhr, bekomme ich aber irgendwie nicht hin. Ich habe das ganze über die time.sleep() Funktion versucht, aber da wird ja das Ganze Programm kurz angehalten (bzw. der Countdown stimmt dann einfach nicht), was ich natürlich nicht will... Über label.config() kann ich ja ein Label gezielt verändern, aber dieses Runterzählen bekomme ich einfach nicht hin....
Bitte um Denkanstöße und bedanke mich!
__deets__
User
Beiträge: 3098
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mittwoch 3. Januar 2018, 17:27

Du musst die after-Funktion verwenden, die hier in gefuehlt 2000 Beitraegen erwaehnt und erklaert wird. Und dann musst du die aktuelle Zeit *abfragen* mit time.time(), da das Betriebssystem weder bei time.sleep noch bei after eine Garantie gibt, wie lange es wirklich wartet.
Sirius3
User
Beiträge: 8095
Registriert: Sonntag 21. Oktober 2012, 17:20

Mittwoch 3. Januar 2018, 17:43

@frcom: daneben gilt noch, was auch Gefühlt drei mal täglich hier bemerkt wird: Benutze keine *-Importe, sondern `import tkinter as tk`. Es darf pro Programm nur ein `Tk`-Exemplar geben, weitere Fenster mit TopLevel erzeugen. Benutze keine globalen Variablen.
Benutzeravatar
wuf
User
Beiträge: 1481
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 4. Januar 2018, 19:59

Hi frcom

Hast weitere Versuche unternommen dein Projekt zum laufen zu bringen?

Gruss wuf :wink:
Take it easy Mates!
Antworten