1. Thành phần giao diện (tiếp)
- Hộp danh sách thả xuống (Combobox):
Là danh sách thả xuống hoặc tự nhập văn bản tùy ý. Là kết hợp giữa một hộp nhập văn bản (Entry) và một danh sách lựa chọn (Listbox).
Giúp nhập liệu nhanh chóng và chính xác hơn. Ví dụ: chọn trường, chọn lớp, chọn môn học, chọn học kỳ,...
Các câu lệnh liên quan:
# Thêm module ttk từ thư viện
from tkinter import ttk
# Tạo combobox
combo = ttk.Combobox(cua_so)
# Nhập dữ liệu cho hộp danh sách
combo["values"] = ("A1", "A2", "A3")
# Hiển thị combobox lên của sổ
combo.pack()
# Lấy giá trị từ hộp danh sách
ds_lop = combo.get()
Ví dụ: Viết chương trình chọn môn học. Khi chọn môn học thì hiện thông báo "Môn .... đã được chọn", xem hình dưới

Tham khảo code:
import tkinter as tk
from tkinter import ttk
def thuc_hien():
kq = combo.get()
print("Môn " + kq + " đã được chọn")
# Tạo cửa sổ
cua_so = tk.Tk()
cua_so.title("Xử lý với Combo box")
cua_so.geometry("350x100")
# Tạo combobox
combo = ttk.Combobox(cua_so)
combo["values"] = ("Toán học", "Văn học", "Tin học")
combo.pack()
# Tạo nút lệnh thực hiện
btn = tk.Button(cua_so, text = "Xem kết quả", command=thuc_hien)
btn.pack()
# Chạy chương trình
cua_so.mainloop()
Trong đoạn code trên, khi thay các câu lệnh pack() thành pack(pady=10), lưu và chạy lại chương trình. Ta thấy các thành phần trên cửa sổ được căn chỉnh cách nhau một khoảng y. Như vậy, pack() là trình quản lý bố cục (geometry manager). Nó có tác dụng sắp xếp, căn chỉnh và hiển thị các thành phần (widget như nút bấm, nhãn chữ, ô nhập liệu) lên cửa sổ ứng dụng.
pack():side:Hướng đặt widget:'top'(trên cùng - mặc định),'bottom'(dưới cùng),'left'(bên trái),'right'(bên phải).fill:Kéo giãn widget theo chiều ngang hoặc dọc nếu cửa sổ bị phóng to. Gồm:'x','y','both'.expand:Nhận giá trịTruehoặcFalse. Khi cửa sổ mở rộng, widget sẽ chiếm thêm các khoảng trống xung quanh.padx/pady:Tạo khoảng cách (đệm) an toàn tính bằng pixel xung quanh widget theo chiều ngang (x) và dọc (y).
Để quản lý bố cục đơn giản hơn sử dụng GRID
- Quản lý bố cục (Grid)
Là một trình quản lý bố cục (layout manager). Dùng để sắp xếp các thành phần (widget) như nút bấm, ô nhập liệu hay nhãn theo dạng dòng (row) và cột (column), tương tự như các ô trong bảng tính Excel
grid():rowvàcolumn: Xác định chính xác vị trí hàng và cột bạn muốn đặt widget.columnspanvàrowspan: Cho phép một widget gộp (merge) nhiều cột hoặc nhiều dòng lại với nhau.sticky: Căn chỉnh vị trí widget bên trong ô của nó (Ví dụ:sticky="N"lên trên,sticky="W"sang trái hoặcsticky="WE"để kéo giãn widget theo chiều ngang).padxvàpady: Tạo khoảng trống đệm (margin) ở bên ngoài các cạnh của widget.
Ví dụ: Viết chương trình chọn môn học. Khi chọn môn học thì hiện thông báo "Môn .... đã được chọn". Sử dụng grid() thay cho pack() để hiển thị và canh chỉnh bố cục.
code tham khảo:
import tkinter as tk
from tkinter import ttk
def thuc_hien():
kq = combo.get()
lbl.config(text = "Môn " + kq + " đã được chọn")
# Tạo cửa sổ
cua_so = tk.Tk()
cua_so.title("Grid và Combobox")
cua_so.geometry("350x250")
# Tạo tiêu đề cửa sổ
lbl_title = tk.Label(cua_so, text = "GRID - QUẢN LÝ BỐ CỤC", font = ("Arial", 14, "bold"), fg = "Blue")
lbl_title.grid(row=0, column=0)
# Tạo combobox
combo = ttk.Combobox(cua_so)
combo["values"]=("Toán học", "Tin học", "Văn học")
combo.grid(row=1, column=0)
# Tạo nút nhấn thực hiện sự kiện
btn = tk.Button(cua_so, text = "Thực hiện", command=thuc_hien)
btn.grid(row=2, column=0)
# Tạo nhãn hiển thị kết quả
lbl = tk.Label(cua_so, text="")
lbl.grid(row=3, column=0)
#Chạy chương trình
cua_so.mainloop()
2. Bài tập
Bài 1: Chạy đoạn code trên, bố cục cửa sổ sẽ chưa được đẹp. Hãy cải tiến đoạn code để bố cục được hợp lý như hình dưới.

Bài 2: Viết chương trình gọi tên học sinh/sinh viên ngẫu nhiên
Hướng dẫn bài 2:
- Chèn thư viện: import random
- Sử dụng thư viện: ten = random.choice(ds_hs)