Tk() เป็น Constructor ของ Root Window (หน้าต่างหลัก) ใน Tkinter ทุกแอปพลิเคชัน Tkinter ต้องมี Root Window เพียงหนึ่งเดียว สร้างโดย Tk() จัดการ Event Loop และเป็น Parent ของ Widgets ทั้งหมด
หน้าที่ของ Tk()
- สร้างหน้าต่างหลัก (Main Window / Root Window)
- เริ่มต้น Tcl/Tk Interpreter
- จัดการ Main Event Loop (
mainloop()) - เป็น Parent container ของ Widgets ทั้งหมด
- จัดการ Window Manager (Title, Icon, Geometry, Protocol)
ตัวอย่างโค้ด
from tkinter import *
win = Tk()
win.geometry("750x250")
win.title("My Application")
Label(win, text="Open Source Learning is Awesome!",
font=('Courier 20 underline')).pack()
win.mainloop()
เมธอดสำคัญของ Tk Instance
| เมธอด | คำอธิบาย |
|---|---|
mainloop() | เริ่ม Event Loop (บล็อคจนกว่าจะปิด) |
destroy() | ทำลายหน้าต่างและจบโปรแกรม |
quit() | หยุด mainloop (ไม่ทำลาย widgets) |
title(str) | ตั้งค่าหัวข้อหน้าต่าง |
geometry("WxH+X+Y") | ขนาดและตำแหน่งหน้าต่าง |
iconbitmap("file.ico") | ตั้งไอคอนหน้าต่าง |
resizable(w, h) | อนุญาต/ห้าม ปรับขนาด |
attributes('-fullscreen', True) | โหมดเต็มจอ |
protocol("WM_DELETE_WINDOW", func) | จัดการปุ่มปิดหน้าต่าง |
หลักการสำคัญ: มี Tk() เพียงหนึ่งเดียว
# ✅ ถูก - Tk() หนึ่งตัว
root = Tk()
# สร้าง child window ด้วย Toplevel()
child = Toplevel(root)
# ❌ ผิด - Tk() หลายตัว (จะทำให้โปรแกรมแฮง/ผิดพลาด)
root1 = Tk()
root2 = Tk() # ERROR!
การเข้าถึง Root จาก Widget ใดๆ
# จาก widget ใดๆ เข้าถึง root ได้ด้วย
root = widget.winfo_toplevel()
# หรือ
root = widget.master.master... (ขึ้นไปจนถึง root)
การประยุกต์ใช้
Tk() เป็นหัวใจของแอป Tkinter ทุกอย่างเริ่มจากที่นี่ การเข้าใจบทบาทช่วยให้ออกโครงสร้างโปรแกรมได้ถูกต้อง โดยเฉพาะเรื่อง Event Loop และ Parent-Child hierarchy