今回、pythonで、
「完全ミュートで動作するタイマーアプリ」
を作成しました。特徴はこれだけです。
WEBが使えない時、デスクトップアプリがおすすめです。
30秒ごとに画面がさりげなく点滅する
1分、3分、5分とボタンでクリックできる
tkinter コード一部解説
<環境>
🖥 Windows
🐍 python 3.12.5
🏆 VSCode
① 時間の変更
使用用途によって変更してください。(デフォルトでは、1分/3分/5分)
python
# タイマー時間の設定
self.create_button(self.buttons_frame, "1分", 60)
self.create_button(self.buttons_frame, "3分", 180)
self.create_button(self.buttons_frame, "5分", 300)
② 残り30秒/終了 の色変更
デフォルトでは、「赤」にしていますが、他の色でもOK
```python:python
def flash_background(self, duration, end=False):
self.root.config(bg="red")
self.root.after(int(duration * 1000), lambda: self.reset_background(end))
全体コード
全体コードはこちら
python
import tkinter as tk
class TimerApp:
def __init__(self, root):
self.root = root
self.root.title("タイマーアプリ")
# 時間設定ボタン
self.buttons_frame = tk.Frame(root)
self.buttons_frame.pack(pady=10)
self.timer_label = tk.Label(root, text="時間を設定してください", font=("Arial", 20))
self.timer_label.pack(pady=10)
# タイマー
self.time_left = 0
self.is_running = False
# タイマー時間の設定
self.create_button(self.buttons_frame, "1分", 60)
self.create_button(self.buttons_frame, "3分", 180)
self.create_button(self.buttons_frame, "5分", 300)
# スタートボタン
self.start_button = tk.Button(root, text="スタート", font=("Arial", 14), command=self.start_timer)
self.start_button.pack(pady=10)
# リセットボタン
self.reset_button = tk.Button(root, text="リセット", font=("Arial", 14), command=self.reset_timer)
self.reset_button.pack(pady=10)
def create_button(self, parent, text, time):
button = tk.Button(parent, text=text, font=("Arial", 14), command=lambda: self.set_time(time))
button.pack(side="left", padx=5)
def set_time(self, time):
if not self.is_running:
self.time_left = time
self.timer_label.config(text=f"残り: {self.format_time(self.time_left)}")
def start_timer(self):
if self.time_left > 0 and not self.is_running:
self.is_running = True
self.run_timer()
def reset_timer(self):
self.is_running = False
self.time_left = 0
self.timer_label.config(text="時間を設定してください")
self.root.config(bg="black") # 背景を黒にリセット
def run_timer(self):
if self.time_left > 0:
self.time_left -= 1
self.timer_label.config(text=f"残り: {self.format_time(self.time_left)}")
if self.time_left == 30:
self.flash_background(0.5) # 残り30秒で背景色変更(赤→黒)
self.root.after(1000, self.run_timer)
else:
self.timer_label.config(text="タイマー終了")
self.is_running = False
self.flash_background(2, end=True) # 終了時背景色変更(赤→黒)
def format_time(self, seconds):
minutes, seconds = divmod(seconds, 60)
return f"{minutes:02}:{seconds:02}"
def flash_background(self, duration, end=False):
self.root.config(bg="red")
self.root.after(int(duration * 1000), lambda: self.reset_background(end))
def reset_background(self, end=False):
self.root.config(bg="black") # 常に黒にリセット
if __name__ == "__main__":
root = tk.Tk()
root.geometry("400x200")
root.config(bg="black") # 初期背景色を黒に設定
app = TimerApp(root)
root.mainloop()
最後に
今回、デスクトップアプリにした理由は「プレゼンしている時、WEBサイト開けなくない?」からのヒントで作りました。
少しでも役立てばいいなと思います✨