ใน Tkinter ผู้ใช้สามารถป้อนข้อความได้โดยใช้วิджชั่นป้อนข้อความพื้นฐานสองอย่างคือ วิджชั่น Text และวิджชั่น Entry วิджชั่น Text โดยทั่วไปใช้รับอินพุตผู้ใช้หลายบรรทัด ในขณะที่ใน Entry widget ผู้ใช้พิมพ์ได้เฉพาะข้อความบรรทัดเดียว
คุณสามารถปรับแต่งวิджชั่นเหล่านี้และเพิ่มฟังก์ชันเพิ่มเติมโดยใช้ฟังก์ชันและเมธอดไลบรารีในตัว ในการตรวจสอบความถูกต้องของอินพุตใน Entry widget คุณสามารถใช้เมธอด register() เมธอดนี้คืนค่าสตริงที่สามารถใช้เรียกฟังก์ชันในขั้นตอนต่อไปได้
ในการตรวจสอบความถูกต้องของอินพุตใน Entry widget ให้ใช้เมธอด config(**options) และส่งอาร์กิวเมนต์ validate และ validatecommand
validate – ระบุเมื่อใดที่ฟังก์ชัน callback ต้องถูกเรียกเพื่อตรวจสอบอินพุตใน Entry หรือ Text widget ที่กำหนด ตัวอย่างเช่น "key" คือค่าระบุว่าทุกครั้งที่ผู้ใช้กด คีย์ (จากคีย์บอร์ด) ฟังก์ชัน callback จะถูกเรียก คุณสามารถใช้ตัวเลือกอื่นๆ ได้เช่น focus, focusin, focusout, none, all เป็นต้น
validatecommand – ระบุค่าที่ขึ้นอยู่กับค่าที่คืนโดยฟังก์ชัน callback ในการระบุค่าใน validatecommand='f' คุณสามารถใช้รหัสแทนที่ Callback ต่างๆ ที่บอกว่าค่าใดและวิธีไหนที่คืนโดยฟังก์ชัน callback
ในการตรวจสอบอินพุตใน Entry widget คุณต้องลงทะเบียนฟังก์ชัน callback และกำหนดค่า Entry widget โดยส่งอาร์กิวเมนต์ที่ตรวจสอบเงื่อนไขที่กำหนดในฟังก์ชัน callback
ตัวอย่าง
มาพิจารณาตัวอย่างที่เราต้องการตรวจสอบ Entry widget ให้ข้อความเฉพาะไม่สามารถลบได้โดยผู้ใช้ นอกจากนี้ เราสามารถทำให้ไม่ได้ลบโดยตรวจสอบสตริงด้วยฟังก์ชัน startswith("string")
# นำเข้าไลบรารีที่จำเป็น
from tkinter import *
# สร้างอินสแตนซ์หน้าต่าง Tkinter
win = Tk()
win.geometry("700x350")
# กำหนดฟังก์ชันทำให้ข้อความไม่ได้ลบ
def make_non_removable(text):
return text.startswith("Enter your Email Id:")
# สร้าง entry widget
entry = Entry(win, bg="black", fg="white")
entry.pack(side="top", fill="x")
# เพิ่มข้อความเริ่มต้น
entry.insert(END, "Enter your Email Id:")
validate_entry = (win.register(make_non_removable), '%P')
entry.config(validate='key', validatecommand=validate_entry)
win.mainloop()
ผลลัพธ์
เมื่อรัน จะแสดง Entry widget ในหน้าต่างพร้อมข้อความเริ่มต้นที่ไม่ได้ลบ "Enter your Email Id:"
