ich habe als Übung ein kleines Countdown Programm in Python 3 geschrieben und dabei, unerwarteter weise, sogar etwas neues gelernt (mein erster Kontakt mit Threads).
Das ganze lässt sich bestimmt noch optimieren, aber es funktioniert ohne Probleme.
In dem Programm kann man...
- eine Dauer (in Sekunden) für den Countdown festlegen.
- den laufenden Countdown abbrechen.
- optional am Ende des Countdown einen Systembefehl ausführen lassen.
Die letzten 10 Sekunden wird der Countdown in rot (statt schwarz) angezeigt.
Bild:

Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf8 -*-
import tkinter as tk
import time
import _thread
import os
def countdownThread():
bstart["state"] = "disabled"
bstop["state"] = "normal"
global anhalten
anhalten = 0
t = eingabe.get()
try:
t = int(t)
_thread.start_new_thread(countdown, (t,))
except:
status["text"] = "Ungültige Eingabe"
bstart["state"] = "normal"
bstop["state"] = "disabled"
def countdown(t):
zeit = t
status["text"] = "Countdown läuft"
while zeit >= 0 and anhalten == 0:
anzeige["text"] = zeit
if zeit <= 10:
anzeige["fg"] = "#FF0000"
else:
anzeige["fg"] = "#000000"
time.sleep(1)
zeit = zeit - 1
bstart["state"] = "normal"
bstop["state"] = "disabled"
if anhalten == 0:
status["text"] = "Countdown beendet"
befehl()
else:
status["text"] = "Countdown abgebrochen"
def stop():
global anhalten
anhalten = 1
bstop["state"] = "disabled"
def befehl():
b = ebefehl.get()
if b != "":
os.system(b)
anhalten = 0
main = tk.Tk()
main.title("Countdown")
status = tk.Label(main, text = "")
status.pack()
anzeige = tk.Label(main, font = "Arial 32 bold", text = "")
anzeige.pack()
lbeingabe = tk.Label(main, text = "Countdown in Sekunden:")
lbeingabe.pack()
eingabe = tk.Entry(main)
eingabe.pack()
lbbefehl = tk.Label(main, text = "Auszuführender Befehl:")
lbbefehl.pack()
lbbefehl2 = tk.Label(main, text = "(optional)")
lbbefehl2.pack()
ebefehl = tk.Entry(main)
ebefehl.pack()
bstart = tk.Button(main, text = "Start", command = countdownThread)
bstart.pack()
bstop = tk.Button(main, text = "Abbrechen", state = "disabled", command = stop)
bstop.pack()
main.mainloop()
Nils