Cách tạo app đồng hồ bấm giờ theo phương pháp Pomodoro bằng Python

Công cụ hữu ích này có thể giúp bạn làm việc năng suất hơn và bạn có thể tự mình tạo ra nó bằng Tkinter. Dưới đây là hướng dẫn tạo app đồng hồ bấm giờ theo Pomodoro bằng Python.

Tạo ứng dụng đồng hồ bằng Python

Kỹ thuật Pomodoro là một phương pháp quản lý thời gian do Francesco Cirillo phát triển. Nó liên quan tới việc dùng một đồng hồ bấm giờ để phân chia công việc theo khoảng thời gian 25 phút. Giữa các khoảng thời gian công việc sẽ có quãng nghỉ 5 phút. Sau khi hoàn thành chu kỳ này 4 lần, bạn có thể nghỉ lâu hơn, tới 20 phút.

Kỹ thuật Pomodoro tăng năng suất, loại bỏ sự sao nhãng và tăng khả năng tập trung vào công việc cho từng cá nhân. Kỹ thuật này loại bỏ đa nhiệm và trao thưởng cho bạn bằng những quảng nghĩ ngơi. Điều này giúp bạn thư giãn và có động lực tiếp tục chuyên tâm vào công việc.

Mô đun Tkinter và Math

Để xây dựng app Pomodoro Timer, bạn cần mô đun Tkinter và Math. Tkinter là thư viện GUI chuẩn cho Python. Nó cung cấp một loạt widget như nút bấm, nhãn và hộp văn bản. Vì thế, bạn có thể phát triển ứng dụng nhanh chóng. Để cài Tkinter, mở terminal và chạy lệnh:

pip install tkinter

Mô đun Math nằm trong thư viện Python chuẩn và rất hữu ích khi thực hiện những phép tính toán học. Nó đi kèm các hàm số học, lượng giác, hàm mũ, logarit, tiện ích và các hằng số như pi và e.

Cách xây dựng app đồng hồ hẹn giờ Pomodoro bằng Python

Bắt đầu bằng cách nhập Tkinter và mô đun Math. Khởi tạo các biến bấm giờ, bộ đếm, thời gian nghỉ dài/ nghỉ ngắn/làm việc hiệu quả theo Pomodoro. Bạn sẽ dùng biến bộ đếm, reps, để tìm ra số chu kỳ Pomodoro mà bộ đếm thời gian đã hoàn thành.

from tkinter import *
import math

WORK_MIN = 25
SHORT_BREAK_MIN = 5
LONG_BREAK_MIN = 20
reps = 0
timer = None

Định nghĩa một hàm, reset_timer(). Bắt đầu bằng cách thiết lập trạng thái của nút bấm Start sang bình thường để kích hoạt nó. Bạn sẽ thấy vị trí tắt nó sau đó.

Gọi phương thức after_cancel() để dừng hàm đặt đồng hồ bấm giờ. Dùng phương thức item_config() trên canvas để reset đồng hồ bấm giờ hiện trên màn hình sang 0. Thay đổi nội dung tiêu đề sang Timer và tô màu tím cho nó. Xóa toàn bộ các dấu tích hiển thị bằng cách đặt text thành chuỗi trống.

Tham chiếu các reps biến toàn cục và reset nó về 0.

def reset_timer():
   start_button["state"] = "normal"
    root.after_cancel(timer)
    canvas.itemconfig(timer_text, text="00:00")
    title_label.config(text="Timer", fg=#A020F0')
    check_marks.config(text="")
    global reps
    reps = 0

Xác định hàm start_timer(). Đây là nơi bạn sẽ vô hiệu hóa nút Start để chặn người dùng click lại nó.

Tiếp tục bằng cách tham chiếu biến reps toàn cục và tăng dần nó. Nếu biến bộ đếm không dư khi chia cho tám (bốn chu kỳ Pomodoro trong đó một chu kỳ bao gồm công việc và một phiên nghỉ ngắn), hãy khởi động bộ đếm thời gian nghỉ dài và hiển thị nó trên màn hình ở màu Xanh lam.

Tương tự, nếu phần còn lại bằng 0 khi chia cho hai, hãy bắt đầu và hiển thị bộ hẹn giờ nghỉ ngắn bằng màu Xanh lục. Nếu không, hãy bắt đầu hẹn giờ làm việc và hiển thị tương tự bằng màu Đỏ.

def start_timer():
   start_button["state"] = "disabled"

Định nghĩa một hàm, count_down() chấp nhận số đếm. Đặt biến số đếm tối thiểu là số nguyên nhỏ gần nhất với số đếm chia cho 60. Đặt số đếm thứ hai làm mô đun của số đếm cho 60. Nếu số giây nhỏ hơn 10, hãy hiển thị thêm một số 0 ở phía trước nó. Đặt canvas hiển thị phút và thời gian hiện tại như đã tính ở trên.

Nếu số đếm lớn hơn 0, tham chiếu bộ đếm thời gian chung và thiết lập yêu cầu nó tự gọi lại hàm count_down sau khi trì hoãn một giây và giảm số đếm xuống 1.

def count_down(count):
    count_min = math.floor(count / 60)
    count_sec = count % 60

    if count_sec < 10:
        count_sec = f"0{count_sec}"

    canvas.itemconfig(timer_text, text=f"{count_min}:{count_sec}")

    if count > 0:
        global timer
        timer = root.after(1000, count_down, count - 1)

Nếu không, gọi hàm start_timer(), đặt dấu tích về 0, và tính các phiên làm việc dưới dạng số nguyên gần nhỏ nhất với bộ đếm chia cho 2. Lặp lại các phiên làm việc và tăng các điểm đánh dấu phù hợp. Cấu hình hàm check_marks() để hiện text dưới dạng biến dấu tích.

    else:
        start_timer()
        marks = ""
        work_sessions = math.floor(reps / 2)

        for _ in range(work_sessions):
            marks += "✓"

        check_marks.config(text=marks)

Khởi tạo phiên bản Tkinter và hiện cửa sổ gốc. Đặt tiêu đề của ứng dụng và cấu hình nó có thêm một số phần đệm ở cả hai hướng. Đặt nền là màu vàng nhạt.

root = Tk()
root.title("Pomodoro Timer Application")
root.config(padx=100, pady=50, bg="#f7f5dd")

Xác định một widget label, hiện text dưới dạng Timer. Thiết lập màu font, màu nền và kiểu font. Dùng trình quản lý bố cục lưới để sắp xếp lại các nhân tố của ứng dụng. Đặt nhãn tiêu đề ở hàng đầu tiên và cột thứ hai.

title_label = Label(text="Timer", fg='#A020F0', bg="#f7f5dd", font=("Arial", 50))
title_label.grid(column=1, row=0)

Xác định một canvas có chiều rộng và cao là 200x224 pixel. Đặt độ dày kích thước đường viền sang 0. Dùng widget PhotoImage để hiện ảnh quả cà chua trên canvas. Dùng phương thức create_image() để chèn ảnh vào canvas.

Dùng phương thức create_text() để tạo nội dung thời gian ở định dạng mm:ss. Đặt chiều rộng, chiều cao, text, màu sắc và kiểu font của thời gian đếm ngược. Đặt chúng vào hàng thứ hai và cột thứ hai của khung lưới.

canvas = Canvas(width=200, height=224, highlightthickness=0)
tomato_img = PhotoImage(file="tomato.png")
canvas.create_image(100, 112, image=tomato_img)
timer_text = canvas.create_text(100, 130, text="00:00", fill="white", font=("Arial", 35, "bold"))
canvas.grid(column=1, row=1)

Xác định hai nút bấm, start_button reset_button. Thiết lập nội dung nó sẽ hiển thị, không đường viền, hàm nó sẽ chạy khi được click, màu nền và kiểu font. Xác định vị trí nút Start ở cột đầu tiên, hàng thứ hai và nút Reset ở cùng cột, hàng thứ ba.

start_button = Button(text="Start", highlightthickness=0, command=start_timer, bg="#e7305b", font=("arial", 15, "bold"))
start_button.grid(column=0, row=2)

reset_button = Button(text="Reset", highlightthickness=0, command = reset_timer, bg="#e7305b", font=("arial", 15, "bold"))
reset_button.grid(column=2, row=2)

Tạo một nhãn ban đầu hiển thị các dấu kiểm dưới dạng None (không có). Đặt màu phông chữ, màu nền và kiểu phông chữ. Đặt nó vào cột thứ hai và hàng thứ tư, bên dưới các nút ở giữa.

Hàm mainloop() báo cho Python chạy lặp sự kiện Tkinter và lắng nghe các sự kiện cho tới khi bạn đóng cửa sổ này.

check_marks = Label(text="", fg='#00FF00', bg="#f7f5dd", font=("arial", 25, "bold"))
check_marks.grid(column=1, row=3)

root.mainloop()

Đặt toàn bộ code lại với nhau và thử ứng dụng Pomodoro Timer.

Kết quả

Khi chạy chương trình này, bạn sẽ thấy một cửa sổ mang tên Timer và bộ đếm giờ được thiết lập ở mức 0. Khi click vào nút bấm, tiêu đề thay đổi thành Timer và bộ đếm giờ bắt đầu từ 0. Khi click vào nút bấm Start, tiêu đề thay đổi sang Work, bộ đếm giờ bắt đầu đếm ngược.

Ứng dụng bấm giờ Pomodoro

Sau chính xác 25 phút, dấu tích hiện và ứng dụng này bắt đầu quãng nghỉ ngắn trong 5 phút.

Ứng dụng bấm giờ quãng nghỉ ngắn Pomodoro

Sau 4 chu kỳ Pomodoro, bộ đếm quãng nghỉ dài được đặt trong 20 phút. Sau khi hết khoảng thời gian này, đồng hồ đếm giờ làm việc bắt đầu hoạt động trở lại.

Ứng dụng bấm giờ quãng nghỉ dài

Trên đây là cách tạo app đồng hồ hẹn giờ bằng Python. Hi vọng bài viết hữu ích với các bạn.

Thứ Bảy, 01/04/2023 11:25
51 👨 659
0 Bình luận
Sắp xếp theo
    ❖ Python