1. Mục tiêu:

  • Listbox
  • Bài tập

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

  • Hộp hiển thị danh sách (Listbox):
    • Là một thành phần (widget) hiển thị danh sách các lựa chọn dưới dạng các dòng văn bản.
    • Cho phép người dùng chọn 1 dòng, nhiều dòng rời rạc hay nhiều dòng liên tục.
    • Có thể tùy chỉnh linh hoạt như đổi màu chữ, màu nền, di chuyển danh sách thông qua thanh cuốn.
    • Các phương thức thường dùng:

+ Tạo Listbox: lst_hs = tk.Listbox(cua_so, width=30, height=10)

+ Thêm phần tử:

Thêm một mục vào vị trí cụ thể: lst_hs.insert(index, item)

Thêm vào cuối list: lst_hs.insert(tk.END, "Vu Ha")

+ Lấy toàn bộ dữ liệu trên list: ds = lst_hs.get(0, tk.END)

+ Xóa phần tử ở vị trí đầu tiên của list: lst_hs.delete(0)

+ Xóa toàn bộ: lst_hs.delete(0, tk.END)

+ Xóa các mục trong khoảng chỉ định: lst_hs.delete(first, last)

+ Lấy vị trí (index) của mục đang được người dùng chọn: lst_hs.curselection()

  • Ví dụ: Tạo cửa sổ như hình dưới, khi nhấn "Hiện danh sách" sẽ hiện: "Minh, Huế, An, Hạnh, Trường, Thanh" ra Listbox. 

list_hien.png (6519 KB)

Code tham khảo:

import tkinter as tk

def hien_ds():
    # Lấy dữ liệu ra danh sách
    kq = lst.get(0, tk.END)
    print(kq)

# Tạo cửa sổ
cua_so = tk.Tk()
cua_so.title("List - in Console")
cua_so.geometry("300x170")

#cột 0 co giãn
cua_so.columnconfigure(0, weight=1)

# Tạo listbox
lst = tk.Listbox(cua_so, width=15, height=6)
lst.grid(row = 0, column=0, pady=10)

# Thêm học sinh vào list
lst.insert(tk.END, "Minh", "Huế", "An", "Hạnh", "Trường", "Thanh")

# Button thực hiện sự kiện hiển thị toàn bộ ra Console
btn = tk.Button(cua_so, text="Hiện danh sách", command=hien_ds)
btn.grid(row=1, column=0, pady=10)

# Chạy chương trình
cua_so.mainloop()

3. Bài tập

Bài 1: Tạo cửa sổ gồm Listbox, Button "Hiện Console" sẽ hiện: "Minh, Huế, An, Hạnh, Trường, Thanh" từ Listbox ra cửa sổ dòng lệnh (Console). 

Bài 2: Tạo cửa sổ gồm: Listbox và 2 Button "Thêm" và "Xóa". Khi mở cửa sổ. Danh sách học sinh như bài 1 nhưng được lấy từ tệp .csv. Nhấn nút "Thêm" thì thêm học sinh "Lan" vào cuối danh sách. Nhấn "Xóa" thì xóa học sinh đang chọn.