การนำเข้า Tkinter ใน Python มักใช้ from tkinter import * เพื่อนำเข้าทุกอย่างในโมดูล และ from tkinter import ttk สำหรับ Themed Widgets ที่ทันสมัยกว่า
ความแตกต่างระหว่าง tkinter และ ttk
| ด้าน | tkinter (Classic) | ttk (Themed) |
|---|---|---|
| รูปลักษณ์ | คลาสสิก แบบเก่า | ทันสมัย ปรับตาม OS theme |
| Widget หลัก | Button, Label, Entry, Canvas... | Button, Label, Entry, Combobox, Treeview, Notebook, Progressbar, Spinbox, Scale... |
| การจัดสไตล์ | พารามิเตอร์ตรงๆ (bg, fg, font) | ใช้ ttk.Style() แยกการจัดสไตล์ |
| Cross-platform | เหมือนกันทุก OS | ปรับตาม Windows/macOS/Linux theme |
ตัวอย่างการใช้งานร่วมกัน
from tkinter import *
from tkinter import ttk
win = Tk()
win.geometry("750x250")
def change_text():
label.configure(text="Welcome")
# Classic Label
label = Label(win, text="Click the below button to Change this Text",
font=('Arial 20 bold'))
label.pack(pady=30)
# Themed Button (ttk)
button = ttk.Button(win, text="Commit", command=lambda: change_text())
button.pack()
win.mainloop()
การใช้ ttk.Style สำหรับปรับสไตล์
style = ttk.Style()
# เปลี่ยนธีม (theme)
print(style.theme_names()) # ดูธีมที่มี: 'winnative', 'clam', 'alt', 'default', 'classic', 'vista', 'xpnative'
style.theme_use('clam') # ใช้ธีม clam
# สร้างสไตล์กำหนดเอง
style.configure('Custom.TButton', font=('Helvetica', 12), padding=10)
style.map('Custom.TButton',
foreground=[('pressed', 'white'), ('active', 'blue')],
background=[('pressed', '!disabled', 'darkblue'), ('active', 'lightblue')])
btn = ttk.Button(win, text="Styled Button", style='Custom.TButton')
btn.pack()
Widget ที่มีเฉพาะใน ttk
ttk.Combobox- Dropdown listttk.Treeview- ตาราง/ไดเรกทอรีttk.Notebook- แท็บ (Tabs)ttk.Progressbar- แถบความคืบหน้าttk.Separator- เส้นคั่นttk.Sizegrip- จับปรับขนาดหน้าต่าง
แนวทางปฏิบัติที่ดี
- ใช้
import tkinter as tkและfrom tkinter import ttkแทนimport *(ป้องกัน namespace pollution) - ใช้ ttk widgets เป็นหลัก สำหรับ UI ทันสมัย
- ใช้ classic widgets (tk.Canvas, tk.Text, tk.Listbox) เมื่อ ttk ไม่มี