目標:一連のゆっくりとした激しい運動を交互に繰り返す30分の時間制限のある活動。ウィンドウは、30分から始まるカウントダウンタイマーを表示することから始まります。エクササイズは30秒の「遅い」アクティビティから始まります-タイマーの下に「遅い」という言葉が表示されます。その後、60秒間の激しい運動を続けます。次に、30秒間のゆっくりとしたペース、60秒間の別の激しい運動、というように続きます。全部で、4つの異なる激しいエクササイズがそれぞれゆっくりとしたペースで交互に行われます。
以下のコードをまとめました。直感的だとは思いません。私はメソッドをバウンスするのが好きではなく、これをより効率的にするために使用できるメソッドがそこにあると感じています。実用的なレベルでは、これはタイマーとメッセージ(つまり、遅い/エクササイズ#が表示される)が同期しなくなり始めるため、うまく機能しません。私はPythonブログを調査し、Tkinterがマルチスレッド化されていないことについて何かを「聞き」続けています。カウントダウンスレッドがリソースを消費するため、after(x、y)が危険にさらされるようになると思います。また、各メソッドの後に「アスリート」のオーディオキューとしてトーンを追加したいと思います。とにかく、私の粗いコードを見てくれてありがとう。
import Tkinter as tk
class ExampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.label = tk.Label(self, text="", width=10, font= ("Helvetica",72), background='yellow', fg = 'red')
self.label2 = tk.Label(self, text="", width=10, font=("Helvetica",72), background='yellow', fg = 'blue')
self.label.pack()
self.label2.pack()
self.remaining = 0
self.countdown(1800) # the 30 minutes countdown initialization
self.run = True
def countdown(self, remaining = None):
if self.remaining == 1799: # marker that starts the methods series
self.start()
if remaining is not None:
self.remaining = remaining
if self.remaining >= 1:
mins = int(self.remaining/60)
#rsecs = self.remaining - mins * 60 #could use this
rsecs = self.remaining % 60 #same results as t - mins * 60
self.remaining = self.remaining -1
self.after(1000, self.countdown)
self.label.configure(text ="%.2f" % (mins + rsecs / 100.0))
else:
self.label.configure(text="Stop")
def start(self):
app.after(0, self.slow1)
return
def slow1(self):
self.label2.configure(text="Slow" )
app.after(30000, self.fast1)
return
def fast1(self):
self.label2.configure(text="Exercise 1" )
app.after(61000, self.slow2)
return
def slow2(self):
self.label2.configure(text="Slow" )
app.after(31000, self.fast2)
return
def fast2(self):
self.label2.configure(text="Exercise 2" )
app.after(61000, self.slow3)
return
def slow3(self):
self.label2.configure(text="Slow" )
app.after(30000, self.fast3)
return
def fast3(self):
self.label2.configure(text="Exercise 3" )
app.after(60000, self.slow4)
return
def slow4(self):
self.label2.configure(text="Slow" )
app.after(30000, self.fast4)
return
def fast4(self):
self.label2.configure(text="Exercise 4" )
app.after(60000, self.slow1)
return
if __name__ == "__main__":
app = ExampleApp()
app.title("Intense Workout")
app.geometry('550x550+200+200')
app.configure(background='yellow')
app.mainloop()