Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ทำไมต้องใช้ import * และ ttk ใน Tkinter

การนำเข้า 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 list
  • ttk.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 ไม่มี