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

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

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"