Chuyển tới nội dung chính

BÀI GIẢNG 7b: Đọc – ghi file với ListBox và TextBox trong guizero

1. Mục tiêu

Kết hợp:

  • TextBox để nhập dữ liệu
  • ListBox để hiển thị danh sách dữ liệu
  • File (txt) để lưu và đọc lại dữ liệu

Ứng dụng thực tế: danh sách việc cần làm, danh bạ, danh sách sản phẩm…


2. Ghi dữ liệu từ TextBox vào file

with open("data.txt", "a") as f:
f.write(textbox.value + "\n")

Lưu ý:

  • Sử dụng "a" để thêm vào cuối file
  • Mỗi mục 1 dòng

3. Đọc dữ liệu từ file vào ListBox

listbox.clear()
with open("data.txt", "r") as f:
for line in f:
listbox.append(line.strip())

4. Xóa mục được chọn và cập nhật lại file

selected = listbox.value
listbox.remove(selected)

# Ghi lại toàn bộ listbox vào file
with open("data.txt", "w") as f:
for item in listbox.items:
f.write(item + "\n")

5. Ví dụ đầy đủ – Danh sách việc cần làm

from guizero import App, TextBox, ListBox, PushButton, Text

FILE = "todo.txt"

def load_data():
listbox.clear()
try:
with open(FILE, "r") as f:
for line in f:
listbox.append(line.strip())
except:
pass

def add_item():
if txt.value:
listbox.append(txt.value)
with open(FILE, "a") as f:
f.write(txt.value + "\n")
txt.value = ""

def delete_item():
if listbox.value:
item = listbox.value
listbox.remove(item)

# Ghi lại file mới
with open(FILE, "w") as f:
for i in listbox.items:
f.write(i + "\n")

app = App(title="Todo List")

Text(app, "Nhập việc cần làm:")
txt = TextBox(app, width=30)

PushButton(app, text="Thêm", command=add_item)

listbox = ListBox(app, width=30, height=10)

PushButton(app, text="Xóa mục đang chọn", command=delete_item)

load_data()

app.display()

🎯 BÀI TẬP LUYỆN TẬP

Bài tập 1 – Ghi chú cá nhân

Yêu cầu:

  • TextBox để nhập ghi chú
  • ListBox để hiển thị danh sách ghi chú
  • Nút “Lưu” → thêm TextBox vào file
  • Nút “Tải lại” → đọc lại mọi ghi chú từ file

Tập trung: đọc file và cập nhật ListBox.


Bài tập 2 – Danh sách học sinh

Tạo ứng dụng với:

  • TextBox nhập tên học sinh
  • ListBox hiển thị danh sách
  • Nút “Thêm”
  • Nút “Xóa”
  • Khi khởi động → tự động đọc danh sách từ students.txt
  • Khi thay đổi → ghi lại vào file

Bài tập 3 – Tìm kiếm trong file

Tạo:

  • ListBox hiển thị dữ liệu từ file
  • TextBox để nhập từ khóa tìm kiếm
  • Nút “Tìm” → lọc và chỉ hiển thị các dòng chứa từ khóa
  • Nút “Hiển thị tất cả” → tải lại toàn bộ file

Gợi ý: dùng if keyword in line.lower():