1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タイマー使いたいけど、プレゼンしている時WEBサイト開けなくない?

Posted at

今回、pythonで、
「完全ミュートで動作するタイマーアプリ」
を作成しました。特徴はこれだけです。
WEBが使えない時、デスクトップアプリがおすすめです。

※YouTube動画です。音量に気をつけてください
YouTube動画

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サイト開けなくない?」からのヒントで作りました。
少しでも役立てばいいなと思います✨

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?