Cách tạo lịch GUI bằng Python

Lịch này nhỏ nhưng đầy đủ chức năng và bạn có thể tạo nó nhanh chóng với sự trợ giúp từ Tkinter và Python.

Lịch

Xây dựng lịch là một cách tuyệt vời để tìm hiểu về việc tạo ứng dụng GUI bằng mô đun Tkinter của Python. Bạn có thể dùng ứng dụng này để quản lý và lên kế hoạch sự kiện sắp tới.

Ngoài ra, bạn có thể mở rộng app để theo dõi các cuộc họp sắp tới và đặt lịch nhắc, thậm chí lên lịch cộng tác trên lịch của người dùng khác để tránh bị trùng lặp thời gian.

Chúng ta sẽ bắt đầu với khung cơ bản của app GUI Calendar.

Mô đun Calendar, Tkinter và Datetime

Để xây dựng GUI Calendar, bạn sẽ dùng mô đun Calendar, Tkinter và Datetime. Mô đun Calendar đi cùng với Python và cho phép bạn chạy ngày, tháng và các tác vụ liên quan tới lịch.

Tkinter cho phép bạn tạo các ứng dụng desktop. Nó cung cấp một loạt widget, thư viện hữu ích, đối tượng canvas và trình phân tích HTML/XML/PDF. Để xây dựng một ứng dụng GUI, bạn cần:

  1. Nhập thư viện.
  2. Tạo một cửa sổ.
  3. Thêm widget vào cửa sổ đó.
  4. Gọi vòng lặp sự kiện chính để triển khai các tác vụ dựa trên tương tác người dùng.

Để cài đặt Tkinter vào hệ thống, mở terminal và chạy:

pip install tkinter

Mô đun DateTime là một nhân tố cần được xây dựng khác. Nó cung cấp một số class mà bạn có thể xử lý với ngày tháng, thời gian và khoảng thời gian. Với mô đun này, bạn có thể xây dựng một lịch trình sự kiện, đồng hồ báo thức, công cụ tính ngày tháng và ứng dụng múi giờ.

Cách xây dựng một lịch GUI bằng Python

Bắt đầu bằng cách nhập mô đun Tkinter, Calendar, và DateTime. Xác định một hàm, printCalendar. Dùng phương thức get() trên Spinbox để lấy tháng và năm người dùng đã chọn. Chuyển những giá trị này sang mô đun lịch để lấy lịch văn bản đã được định dạng, đại diện cho năm và tháng đã xác định. Text này đại diện cho một khung lưới đơn cách đơn giản, với ngày được sắp xếp theo tuần, bắt đầu từ thứ Hai.

Xóa mọi dữ liệu hiện có khỏi màn hình. 1.0 cho biết phần đầu của trường, end là phần cuối của trường. Cuối cùng, chèn lịch được tạo ban đầu và hiện nó trên màn hình này.

from tkinter import *
import calendar
from datetime import date

def printCalendar():
    month = int(month_box.get())
    year = int(year_box.get())
    output_calendar = calendar.month(year, month)
    calendar_field.delete(1.0, 'end')
    calendar_field.insert('end', output_calendar)

Xác định một hàm, reset. Xóa nội dung trên màn hình và đặt ngày tháng, năm sang hiện tại, rồi dùng config() để hiện nó trên màn hình.

def reset():
    calendar_field.delete(1.0, 'end')
    month_var.set(current_month)
    year_var.set(current_year)
    month_box.config(textvariable=month_var)
    year_box.config(textvariable=year_var)

Xác định một hàm, đóng để hủy hiển thị cửa sổ và thoát chương trình.

def close():
    guiWindow.destroy()

Khởi tạo phiên bản Tkinter và hiện cửa sổ gốc. Đặt tiêu đề, kích thước theo pixel và vô hiệu hóa thay đổi kích thước bằng cách giữ nguyên tham số bằng 0.

if __name__ == "__main__":
    guiWindow = Tk()
    guiWindow.title("GUI Calendar")
    guiWindow.geometry('500x550')
    guiWindow.resizable(0, 0)

Xác định 4 khung cho tiêu đề, mục tháng và năm, màn hình và nút bấm. Nó hiện chức năng của một container, chỉ hướng vị trí của widget khác. Nó sắp xếp bố cục và cung cấp lề cho những widget này bằng các phần hình chữ nhật trên màn hình.

Sắp xếp các khung trong khối trước khi đặt chúng vào guiwindow bằng pack(). Đặt giá trị expand sang true để cho phép widget chỉnh lại kích thước và mở rộng không gian có sẵn của nó. Thiết lập thuộc tính fill để cả hai cho phép widget mở rộng vừa khít toàn bộ màn hình ở hướng x và y.

    header_frame = Frame(guiWindow)
    entry_frame = Frame(guiWindow)
    result_frame = Frame(guiWindow)
    button_frame = Frame(guiWindow)

    header_frame.pack(expand=True, fill="both")
    entry_frame.pack(expand=True, fill="both")
    result_frame.pack(expand=True, fill="both")
    button_frame.pack(expand=True, fill="both")

Xác định 3 nhãn cho tiêu đề, tháng và năm. Đặt cửa sổ chính bạn muốn đặt nó vào bên trong, nội dung nó sẽ hiển thị, kiểu & màu font. Đóng gói và đặt các nhãn ở vị trí phù hợp. Kết hợp IntVar() với entry_frame để thiết lập và nhận dữ liệu số nguyên.

    header_label = Label(header_frame, text="CALENDAR",
       font=('arial', '45', 'bold'), fg="#A020F0")

    header_label.pack(expand=True, fill="both")

    month_label = Label(entry_frame, text="Month:",
       font=("arial", "20", "bold"), fg="#000000")

    year_label = Label(entry_frame, text="Year:",
       font=("arial", "20", "bold"), fg="#000000")

    month_label.place(x=30, y=0)
    year_label.place(x=275, y=0)
    month_var = IntVar(entry_frame)
    year_var = IntVar(entry_frame)

Lấy tháng, năm hiện tại và thiết lập nó sang biến IntVar(). Dùng widget Spinbox để xác định một phạm vi các giá trị cho người dùng. Thiết lập phạm vi giá trị Spinbox sẽ chứa, chiều rộng, giá trị hiện tại nó nắm giữ và kiểu font. Đặt các box ở nơi thích hợp.

    current_month = date.today().month
    current_year = date.today().year
    month_var.set(current_month)
    year_var.set(current_year)

    month_box = Spinbox(entry_frame, from_=1, to=12, width="10",
       textvariable=month_var, font=('arial','15'))

    year_box = Spinbox(entry_frame, from_=0000, to=3000, width="10",
       textvariable=year_var,font=('arial','15'))

    month_box.place(x=130, y=5)
    year_box.place(x=360, y=5)

Khai báo trường text và đặt cửa sổ chính, chiều rộng, cao, kiểu font, hoạt ảnh 3D và chiều rộng đường viền. Sắp xếp widget văn bản, khai báo 3 nút bấm để hiển thị, reset và đóng cửa sổ. Các nút bấm chứa thêm thuộc tính background-color và dòng lệnh.

Dùng thuộc tính dòng lệnh, bạn có thể đặt chức năng nó thực hiện khi được click. Đặt các nút bấm vào một hàng đơn lẻ với khoảng cách rộng giữa các nút.

    calendar_field = Text(result_frame, width=20, height=8,
       font=("courier", "18"), relief=RIDGE, borderwidth=2)

    calendar_field.pack()

    display_button = Button(button_frame, text="DISPLAY", bg="#A020F0",
       fg="#E0FFFF", command=printCalendar, font=('arial', '15'))

    reset_button = Button(button_frame, text="RESET", bg="#A020F0",
       fg="#E0FFFF", command=reset, font=('arial','15'))

    close_button = Button(button_frame, text="CLOSE", bg="#A020F0",
       fg="#E0FFFF", command=close, font=('arial','15'))

    display_button.place(x=55, y=0)
    reset_button.place(x=210, y=0)
    close_button.place(x=350, y=0)

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

    guiWindow.mainloop()

Đặt tất cả code lại với nhau để thấy lịch GUI chạy.

Kết quả:

Kết quả mẫu lịch được tạo bằng Python GUI

Khi chạy chương trình này, nó hiện một cửa sổ với ngày và tháng hiện tại. Nút Reset hiện cùng màn hình khi được click.

Khi đặt tháng sang 3 và năm là 2000, chương trình hiện lịch cho tháng 3/2000. Khi nhấn nút Close, nó hủy cửa sổ và dừng hoạt động đang thực thi.

GUI Calendar

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

Thứ Hai, 27/02/2023 16:54
31 👨 882
0 Bình luận
Sắp xếp theo
    ❖ Học Python