Trong Tkinter, người dùng có thể nhập văn bản bằng hai widget nhập văn bản cơ bản là widget Text và widget Entry. Widget Text thường dùng để chấp nhận đầu vào nhiều dòng, trong khi widget Entry chỉ cho phép nhập một dòng.
Bạn có thể tùy chỉnh các widget này và thêm chức năng bổ sung bằng các hàm và phương thức thư viện tích hợp. Để xác thực đầu vào trong widget Entry, bạn có thể dùng phương thức register(). Phương thức này trả về chuỗi có thể dùng để gọi hàm ở các giai đoạn sau.
Để xác thực đầu vào trong widget Entry, dùng phương thức config(**options) và truyền đối số validate và validatecommand.
validate – Chỉ định khi nào hàm callback được gọi để xác thực đầu vào trong Entry hoặc Text widget cho trước. Ví dụ, "key" là giá trị chỉ định rằng bất cứ khi nào người dùng nhấn phím (từ bàn phím), hàm callback sẽ được gọi. Bạn cũng có thể dùng các tùy chọn khác như focus, focusin, focusout, none, all, v.v.
validatecommand – Chỉ định giá trị phụ thuộc vào giá trị trả về bởi hàm callback. Để chỉ định giá trị trong validatecommand='f', bạn có thể dùng các mã thay thế callback khác nhau cho biết cách và giá trị gì được trả về bởi hàm callback.
Để xác thực đầu vào trong widget Entry, bạn phải đăng ký hàm callback và cấu hình widget Entry bằng cách truyền các đối số kiểm tra điều kiện định nghĩa trong hàm callback.
Ví dụ
Xét ví dụ nơi chúng ta muốn xác thực widget Entry sao cho văn bản cụ thể không thể bị xóa bởi người dùng. Ngoài ra, chúng ta có thể làm cho nó không thể xóa bằng cách kiểm tra chuỗi với hàm startswith("string").
# Nhập thư viện cần thiết
from tkinter import *
# Tạo instance của cửa sổ tkinter
win = Tk()
win.geometry("700x350")
# Định nghĩa hàm làm văn bản không thể xóa
def make_non_removable(text):
return text.startswith("Enter your Email Id:")
# Tạo widget entry
entry = Entry(win, bg="black", fg="white")
entry.pack(side="top", fill="x")
# Thêm văn bản mặc định
entry.insert(END, "Enter your Email Id:")
validate_entry = (win.register(make_non_removable), '%P')
entry.config(validate='key', validatecommand=validate_entry)
win.mainloop()
Kết quả
Khi thực thi, nó sẽ hiển thị widget Entry trong cửa sổ với văn bản mặc định không thể xóa "Enter your Email Id:".
