สร้าง GUI ที่อัปเดตอัตโนมัติด้วย Tkinter
GUI Window มี Controls หลายอย่าง เช่น Labels, Buttons, Text Boxes บางครั้งเราต้องการให้เนื้อหาของ Controls (เช่น Label) อัปเดตอัตโนมัติขณะที่กำลังดูหน้าต่าง
ใช้ after() สำหรับการเรียกซ้ำ
เมธอด after(ms, func) ใช้เรียก Function หลังจากเวลาที่กำหนด (Milliseconds) เช่น 1000 ms = 1 วินาที Function ที่เรียกซ้ำจะทำการอัปเดตข้อความหรือการเปลี่ยนแปลงที่ต้องการ
ตัวอย่าง: Label แสดงตัวเลขสุ่มทุก 1 วินาที
import tkinter as tk
from random import randint
root = tk.Tk()
root.title("Auto Updating GUI")
root.geometry("300x150")
lab = tk.Label(root, font=("Arial", 24), text="0")
lab.pack(pady=40)
def update():
# อัปเดตข้อความ Label ด้วยตัวเลขสุ่ม 0-1000
lab['text'] = randint(0, 1000)
# เรียกตัวเองอีกครั้งหลัง 1000 ms (1 วินาที)
root.after(1000, update)
# เรียกครั้งแรก
update()
root.mainloop()
คำอธิบายโค้ดสำคัญ
root.after(1000, update)
- Parameter แรก (1000): ช่วงเวลาใน Milliseconds (1000 = 1 วินาที)
- Parameter ที่สอง (update): ชื่อ Function ที่จะเรียกซ้ำ
- บรรทัดนี้เป็นหัวใจของการอัปเดตอัตโนมัติ - Function จะเรียกตัวเองซ้ำเรื่อยๆ
โครงสร้างหลัก
- Import
tkinterและrandint - สร้าง Root Window
- สร้าง Label และ Pack
- Define Function
update()ที่:- เปลี่ยนข้อความ Label
- เรียก
root.after(1000, update)เพื่อ Schedule การเรียกซ้ำ
- เรียก
update()ครั้งแรกเพื่อเริ่ม Loop - เรียก
root.mainloop()เริ่ม Event Loop
การปรับแต่ง
# เปลี่ยนช่วงเวลา (500 ms = 0.5 วินาที)
root.after(500, update)
# อัปเดตแบบอื่น เช่น เวลาปัจจุบัน
from datetime import datetime
def update_time():
lab['text'] = datetime.now().strftime("%H:%M:%S")
root.after(1000, update_time)
# หยุดการอัปเดต (เก็บ after_id ไว้)
after_id = root.after(1000, update)
# หยุดได้ด้วย:
# root.after_cancel(after_id)
หมายเหตุ
โค้ดต้นฉบับใช้ from Tkinter import * (Python 2) แต่ Python 3 ใช้ import tkinter as tk (ตัวพิมพ์เล็ก)