1. Mục tiêu:

  • LabelFrame và sự kết hợp giữa labelframe() với grid()
  • Frame và sự kết hợp giữa frame() với grid()
  • Khi nào sử dụng: grid(), frame, labelframe()
  • Bài tập

2. Thành phần giao diện (tiếp)

  • Khung (LabelFrame()):
    • Là một vùng chứa (widget hình chữ nhật) kết hợp với tiêu đề nhãn (label) đính kèm.
    • Sử dụng để nhóm, sắp xếp các các tiện ích liên quan lại với nhau và hiển thị một đường viền có tên để người dùng dễ phân loại. 
    • Các phương thức thường dùng:

+ Tạo labelframe(): frame_nhap = tk.LabelFrame(cua_so, text="Tiêu đề nhãn")

+ Kết hợp với grid: frame_nhap.grid(row=0. column=0)

+ Ví dụ: Tạo cửa sổ gồm các thành phần như hình sau

lableframe.png (5322 KB)

Code tham khảo:

import tkinter as tk

cua_so = tk.Tk()
cua_so.geometry("350x350")

#Định dạng cửa sổ sao cho nhóm thông tin học sinh ở giữa của cửa sổ (co giãn cột 0)
cua_so.columnconfigure(0, weight=1)

frame_nhap = tk.LabelFrame(cua_so, text="Thông tin học sinh")
frame_nhap.grid(row=0, column=0, pady=6)

lbl_nhap = tk.Label(frame_nhap, text="Họ tên")
lbl_nhap.grid(row=0, column=0, pady=6)

txt_nhap = tk.Entry(frame_nhap)
txt_nhap.grid(row=0, column=1, pady=6)

btn_them = tk.Button(frame_nhap, text="Thêm")
btn_them.grid(row=0, column=2, pady=6, padx=10)

cua_so.mainloop()
  • Khung (Frame()):
    • Là một vùng chứa (widget hình chữ nhật)
    • Sử dụng để nhóm và sắp xếp các thành phần giao diện khác (như nút bấm, nhãn, ô nhập liệu)
    • Các phương thức thường dùng:

+ Tạo frame(): frame_nhap = tk.Frame(cua_so)

+ Kết hợp với grid: frame_nhap.grid(row=0. column=0)

+ Ví dụ: Tạo cửa sổ gồm các thành phần như hình sau

frame.png (2662 KB)

code tham khảo:

import tkinter as tk

#Tạo cửa sổ
cua_so = tk.Tk()
cua_so.title("Định dạng thành phần với Frame và Grid")
cua_so.geometry("300x200")

#Co giãn cột 0 để dữ liệu hiển thị trên cửa sổ đẹp hơn
cua_so.columnconfigure(0, weight=1)

#Tạo frame
frame_nhap = tk.Frame(cua_so)
frame_nhap.grid(row=0, column=0)

#Tạo các thành phần: nhãn và hộp nhập văn bản
lbl_hoten = tk.Label(frame_nhap, text="Họ và tên: ")
lbl_hoten.grid(row=0,column=0,pady=6)

txt_nhap = tk.Entry(frame_nhap)
txt_nhap.grid(row=0, column=1, pady=6)

btn_nhap = tk.Button(frame_nhap, text="Thêm")
btn_nhap.grid(row=0, column=2, pady=6, padx=10)

#Chạy chương trình
cua_so.mainloop()
  • Khi nào sử dụng grid(), frame(), labelframe():
    • Grid(): Sử dụng với dự án học tập nhỏ như: Phép toán đơn giản; Đổi độ C ra độ F

    • LabelFrame() kết hợp grid(): Sử dụng cho dự án thực tế như: Quản lý học sinh; Quản lý điểm; Thư viện; Thi trắc nghiệm

    • Có có thể áp dụng theo cách sau:

      Khi dự án <= 5 widget: sử dụng grid()

      Khi dự án >10 widget: sử dụng labelframe() +  grid()

      Khi dự án>20 widget: Sử dụng frame() + labelframe() +  grid()

3. Bài tập

Bài 1: Viết chương trình nhập tên học sinh, điểm trung bình và cho biết học sinh đạt học lực: Xuất sắc, Giỏi, Khá, Đạt

Bài 2: Viết chương trình "Quản lý học sinh"