การสร้าง GUI ด้วย Tkinter

Tkinter คืออะไร

ครั้งหนึ่งนานมาแล้วมีภาษาเขียนโปรแกรมชื่อว่า Tcl (Tool Command Language) ซึ่งเป็นภาษาที่คล้ายๆ python ตรงที่มันง่ายและรันได้ในคอมพิวเตอร์หลายๆระบบ

ต่อมาผู้คนก็สร้าง toolkit ขึ้นมาตัวหนึ่งชื่อว่า Tk ซึ่งเป็น library ที่ใช้ในการสร้าง Graphical User Interface โดยเฉพาะ Tk เริ่มได้รับความนิยมมาก ไม่ใช่เฉพาะในภาษา Tcl เท่านั้น แต่กลายเป็นวิถีแห่งการสร้าง GUI ไปเลย

หลังจากนั้นก็เลยมีคนทำ library ในภาษา python ชื่อว่า Tkinter มาครอบ Tk อีกทีหนึ่ง เพื่อให้เราสามารถสร้าง GUI ในภาษา python ได้อย่างทุกวันนี้

First Tkinter App: "Hello World"

อย่ารอช้าเลยมาสร้าง GUI กันดีกว่า เริ่มด้วยการสร้างหน้าต่างที่บอกโลกว่า hello world ลองรันโค้ดต่อไปนี้ใน PyCharm แล้วรอดูผลลัพธ์

from tkinter import *

root = Tk()

w = Label(root, text="Hello World!")
w.pack()

root.mainloop()

คำอธิบายโค้ด

from tkinter import *

โค้ดนี้ import Tkinter เข้ามาในสคริปท์ของเรา ถ้าเป็น python 2 จะต้องเปลี่ยนชื่อ library เป็นตัวพิมพ์ใหญ่ เช่น

from Tkinter import *

ต่อมาเราใช้โค้ดข้างล่างในการสร้างหน้าต่างแรกของโปรแกรม หน้าต่างนี้คือเป็น root ของหน้าต่างอื่นๆ

root = Tk()

Tk ก็คือ object อย่างหนึ่งที่สร้างหน้าต่างขึ้นมาแบบง่ายๆ มี title bar ข้างบนและปุ่มเปิดปิดอื่นๆ แต่ละโปรแกรมควรจะมีเพียงหนึ่ง root และ เราต้องสร้าง root ก่อนสร้างอย่างอื่นเสมอ

w = Label(root, text="Hello World!")

ต่อมาเราสร้างตัวแปรที่ชื่อว่า w แล้วให้มันเก็บวัตถุประเภท Label ซึ่งก็คือข้อความธรรมดาๆที่แสดงขึ้นมาบนหน้าต่าง

argument แรกกำหนดว่าจะให้สร้าง Label บนวัตถุไหน เราระบุให้มันสร้างบน root

argument อื่นๆ กำหนดคุณลักษณะอื่นๆของ Label เช่น ข้อความ สี ขนาดตัวอักษร

Tk เรียกวัตถุเช่น Label ว่า widget จะเห็นว่าในโค้ดนี้ เราสร้าง widget แบบ Label แล้วให้มันไปเกาะ root widget ซึ่งเป็นหน้าต่างธรรมดา w คือตัวแปรที่เก็บตัว widget ไว้

w.pack()

คำสั่ง pack() บอกให้ widget นำตัวเองไปวางบน root แล้วปรับขนาดตนเองให้พอดีกับข้อความที่เราใส่ลงไป

root.mainloop()

โค้ดบรรทัดสุดท้ายเรียกว่า Tk event loop คือ ลูปที่รันวนไปเรื่อยๆ ตลอดเวลาที่เราเปิดหน้าต่างของโปรแกรมนั้นไว้ โปรแกรมจะออกจากลูปเมื่อเราปิดหน้าต่าง event loop จะคอยดูว่าเรา คลิกหรือพิมพ์อะไรบ้าง โปรแกรมจะได้คอยตอบสนองคำสั่งของผู้ใช้