วิธีสร้างแอปพลิเคชัน GUI ภายใต้ Linux Desktop โดยใช้ PyGObject - ตอนที่ 1
การสร้างแอปพลิเคชันบน Linux สามารถทำได้หลายวิธี แต่มีวิธีที่จำกัด ดังนั้นการใช้ภาษาโปรแกรมและไลบรารีที่ง่ายที่สุดและใช้งานได้ดีที่สุด นั่นคือเหตุผลที่เราจะมาดูอย่างรวดเร็วเกี่ยวกับการสร้างแอปพลิเคชันภายใต้ Linux เดสก์ท็อปที่ใช้ไลบรารี GTK+ พร้อมภาษาการเขียนโปรแกรม Python ซึ่งเรียกว่า “PyGObject ”
PyGObject ใช้ GObject Introspection เพื่อสร้างการเชื่อมโยงสำหรับภาษาการเขียนโปรแกรมเช่น Python PyGObject เป็นรุ่นถัดไปจาก PyGTK คุณสามารถพูดได้ว่า PyGObject=Python + GTK3
วันนี้ เราจะเริ่มซีรีส์เกี่ยวกับการสร้างแอปพลิเคชัน GUI (Graphical User Interface) ภายใต้เดสก์ท็อป Linux โดยใช้ไลบรารี GTK+ และภาษา PyGobject ซีรีส์นี้จะครอบคลุมหัวข้อต่อไปนี้:
เกี่ยวกับไพธอน
ก่อนอื่น คุณต้องมีความรู้พื้นฐานเกี่ยวกับ Python ก่อน Python เป็นภาษาโปรแกรมที่ทันสมัยและใช้งานง่าย เป็นหนึ่งในภาษาการเขียนโปรแกรมที่มีชื่อเสียงที่สุดในโลก คุณจะสามารถสร้างแอปพลิเคชันและเครื่องมือที่ยอดเยี่ยมมากมายได้โดยใช้ Python คุณอาจเรียนหลักสูตรฟรีอย่างเช่นหลักสูตรที่ codeacademy.com หรืออ่านหนังสือเกี่ยวกับ Python ได้ที่:
เกี่ยวกับ GTK+
GTK+ เป็นชุดเครื่องมือโอเพ่นซอร์สข้ามแพลตฟอร์มสำหรับสร้างส่วนต่อประสานผู้ใช้แบบกราฟิกสำหรับแอปพลิเคชันเดสก์ท็อป เริ่มแรกในปี 1998 ในฐานะชุดเครื่องมือ GUI สำหรับ GIMP ต่อมาถูกนำไปใช้ในแอปพลิเคชันอื่นๆ มากมายและ ในไม่ช้าก็กลายเป็นหนึ่งในห้องสมุดที่มีชื่อเสียงที่สุดในการสร้าง GUI GTK+ ได้รับการเผยแพร่ภายใต้ใบอนุญาต LGPL
การสร้างแอปพลิเคชัน GUI ภายใต้ Linux
มี 2 วิธีในการสร้างแอปพลิเคชันโดยใช้ GTK+ และ Python:
- การเขียนส่วนต่อประสานกราฟิกโดยใช้โค้ดเท่านั้น
- การออกแบบอินเทอร์เฟซแบบกราฟิกโดยใช้โปรแกรม “Glade” ซึ่งเป็นเครื่องมือ RAD ในการออกแบบอินเทอร์เฟซ GTK+ ได้อย่างง่ายดาย Glade สร้าง GUI เป็นไฟล์ XML ซึ่งสามารถใช้กับภาษาการเขียนโปรแกรมใดๆ เพื่อสร้าง GUI ได้ หลังจากส่งออกไฟล์ XML ของ GUI แล้ว เราจะสามารถเชื่อมโยงไฟล์ XML กับของเรา โปรแกรมทำงานที่เราต้องการ
เราจะอธิบายสั้น ๆ ทั้งสองวิธี
วิธีรหัสเท่านั้น
การเขียน GUI โดยใช้โค้ดอาจเป็นเรื่องยากเล็กน้อยสำหรับโปรแกรมเมอร์มือใหม่และเป็นการเสียเวลาอย่างมาก แต่การใช้มัน เราสามารถสร้าง GUI ที่ใช้งานได้ดีมากสำหรับโปรแกรมของเรา มากกว่าที่เราสร้างขึ้นโดยใช้เครื่องมือบางอย่าง เช่น Glade
ลองมาตัวอย่างต่อไปนี้
#!/usr/bin/python
-*- coding: utf-8 -*-
from gi.repository import Gtk
class ourwindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="My Hello World Program")
Gtk.Window.set_default_size(self, 400,325)
Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER)
button1 = Gtk.Button("Hello, World!")
button1.connect("clicked", self.whenbutton1_clicked)
self.add(button1)
def whenbutton1_clicked(self, button):
print "Hello, World!"
window = ourwindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
คัดลอกโค้ดด้านบน วางลงในไฟล์ “test.py ” และตั้งค่าการอนุญาต 755 บนไฟล์ test.py และเรียกใช้ไฟล์ในภายหลังโดยใช้ “./test.py ” นั่นคือสิ่งที่คุณจะได้รับ
nano test.py
chmod 755 test.py
./test.py
เมื่อคลิกที่ปุ่ม คุณจะเห็นประโยค “Hello, World! ” พิมพ์ออกมาในเทอร์มินัล:
ให้ฉันอธิบายรหัสในการอธิบายโดยละเอียด
- #!/usr/bin/python: เส้นทางเริ่มต้นสำหรับล่าม Python (เวอร์ชัน 2.7 ในกรณีส่วนใหญ่) บรรทัดนี้ต้องเป็นบรรทัดแรกในทุกไฟล์ Python
- # -*- coding: utf-8 -*-: ที่นี่เราตั้งค่าการเข้ารหัสเริ่มต้นสำหรับไฟล์ UTF-8 นั้นดีที่สุดหากคุณต้องการรองรับภาษาที่ไม่ใช่ภาษาอังกฤษ ปล่อยไว้อย่างนั้น .
- จาก gi.repository import Gtk: ที่นี่เรากำลังนำเข้าไลบรารี GTK 3 เพื่อใช้ในโปรแกรมของเรา
- Class ourwindow(Gtk.Window): ที่นี่เรากำลังสร้างคลาสใหม่ซึ่งเรียกว่า "ourwindow" เรายังตั้งค่าประเภทอ็อบเจ็กต์คลาสเป็น "Gtk.Window "
- def __init__(self): ไม่มีอะไรใหม่ เรากำลังกำหนดส่วนประกอบของหน้าต่างหลักที่นี่
- Gtk.Window.__init__(self, title=”My Hello World Program”): เราใช้บรรทัดนี้เพื่อตั้งชื่อ “My Hello World Program ” เป็นหน้าต่าง “ourwindow ” คุณอาจเปลี่ยนแปลงได้ ชื่อถ้าคุณต้องการ
- Gtk.Window.set_default_size(self, 400,325): ฉันไม่คิดว่าบรรทัดนี้จำเป็นต้องมีคำอธิบาย ต่อไปนี้เราจะตั้งค่าความกว้างและความสูงเริ่มต้นสำหรับหน้าต่างของเรา
- Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): เมื่อใช้บรรทัดนี้ เราจะสามารถตั้งค่าตำแหน่งเริ่มต้นสำหรับหน้าต่างได้ ในกรณีนี้ เราตั้งค่าไว้ที่กึ่งกลาง โดยใช้พารามิเตอร์ “Gtk.WindowPosition.CENTER ” หากต้องการ คุณสามารถเปลี่ยนเป็น “Gtk.WindowPosition.MOUSE ” เพื่อเปิดหน้าต่างบนตำแหน่งตัวชี้เมาส์
- button1=Gtk.Button(“Hello, World!”): เราสร้าง Gtk.Button ใหม่ และเราเรียกมันว่า "button1 " ข้อความเริ่มต้นสำหรับปุ่มคือ "Hello, World! ” คุณสามารถสร้างวิดเจ็ต Gtk ได้หากต้องการ
- button1.connect(“clicked”, self.whenbutton1_clicked): ที่นี่ เรากำลังเชื่อมโยงสัญญาณ "คลิกแล้ว " กับการกระทำ "whenbutton1_clicked " ดังนั้นเมื่อมีการคลิกปุ่ม การกระทำ "whenbutton1_clicked " ถูกเปิดใช้งาน
- self.add(button1): หากเราต้องการให้วิดเจ็ต Gtk ของเราปรากฏขึ้น เราต้องเพิ่มวิดเจ็ตเหล่านั้นลงในหน้าต่างเริ่มต้น บรรทัดง่ายๆ นี้จะเพิ่มวิดเจ็ต “button1 ” ลงในหน้าต่าง ซึ่งจำเป็นมาก ทำเช่นนี้.
- def whenbutton1_clicked(self, button): ตอนนี้เรากำลังกำหนดการกระทำ "whenbutton1_clicked " ที่นี่ เรากำลังกำหนดสิ่งที่จะเกิดขึ้นเมื่อมีการคลิกวิดเจ็ต "button1 " "(self, ปุ่ม ) ” มีความสำคัญในการระบุประเภทออบเจ็กต์หลักของสัญญาณ
- พิมพ์ “Hello, World!”: ฉันไม่ต้องอธิบายเพิ่มเติมที่นี่
- window=ourwindow(): เราต้องสร้างตัวแปรโกลบอลใหม่และตั้งค่าเป็นคลาส ourwindow() เพื่อให้เราสามารถเรียกมันได้ในภายหลังโดยใช้ไลบรารี GTK+
- window.connect(“delete-event”, Gtk.main_quit): ตอนนี้เรากำลังเชื่อมต่อสัญญาณ “delete-event ” กับการดำเนินการ “Gtk.main_quit ” ซึ่งเป็นสิ่งสำคัญในการที่จะลบ วิดเจ็ตทั้งหมดหลังจากที่เราปิดหน้าต่างโปรแกรมของเราโดยอัตโนมัติ
- window.show_all(): การแสดงหน้าต่าง
- Gtk.main(): เรียกใช้ไลบรารี Gtk
แค่นั้นแหละ ง่ายใช่มั้ย? และใช้งานได้ดีมากหากเราต้องการสร้างแอปพลิเคชั่นขนาดใหญ่ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้างอินเทอร์เฟซ GTK+ โดยใช้โค้ดเท่านั้น คุณสามารถเยี่ยมชมเว็บไซต์เอกสารอย่างเป็นทางการได้ที่:
บทช่วยสอน Python GTK3
วิถีนักออกแบบ Glade
อย่างที่ฉันบอกไปแล้วในตอนต้นของบทความ Glade เป็นเครื่องมือที่ง่ายมากในการสร้างอินเทอร์เฟซที่เราต้องการสำหรับโปรแกรมของเรา ซึ่งมีชื่อเสียงมากในหมู่นักพัฒนาและมีการสร้างอินเทอร์เฟซแอปพลิเคชันที่ยอดเยี่ยมมากมายโดยใช้มัน วิธีนี้เรียกว่า "การพัฒนาแอปพลิเคชันอย่างรวดเร็ว"
คุณต้องติดตั้ง Glade เพื่อเริ่มใช้งานบน Debian/Ubuntu/Mint run:
sudo apt-get install glade
บน RedHat/Fedora/CentOS ให้รัน:
yum install glade
หลังจากที่คุณดาวน์โหลดและติดตั้งโปรแกรม และหลังจากคุณเรียกใช้งาน คุณจะเห็นวิดเจ็ต Gtk ที่มีอยู่ทางด้านซ้าย คลิกที่วิดเจ็ต “หน้าต่าง ” เพื่อสร้างหน้าต่างใหม่
คุณจะสังเกตเห็นว่ามีการสร้างหน้าต่างว่างใหม่ขึ้นมา
ตอนนี้คุณสามารถเพิ่มวิดเจ็ตบางส่วนได้แล้ว โดยคลิกที่วิดเจ็ต “ปุ่ม” บนแถบเครื่องมือด้านซ้าย แล้วคลิกบนหน้าต่างว่างเพื่อเพิ่มปุ่มลงในหน้าต่าง
คุณจะสังเกตเห็นว่ารหัสปุ่มคือ “button1 ” ตอนนี้อ้างอิงถึงแท็บสัญญาณในแถบเครื่องมือด้านขวา และค้นหาสัญญาณ “คลิกแล้ว ” แล้วป้อน “button1_clicked ” ข้างใต้
ตอนนี้เราได้สร้าง GUI ของเราแล้ว มาส่งออกกัน คลิกที่เมนู “ไฟล์ ” และเลือก “บันทึก ” บันทึกไฟล์ในโฮมไดเร็กตอรี่ของคุณในชื่อ “myprogram.glade ” และ ออก
ตอนนี้ ให้สร้างไฟล์ “test.py ” ใหม่ และป้อนโค้ดต่อไปนี้ข้างใน
#!/usr/bin/python
-*- coding: utf-8 -*-
from gi.repository import Gtk
class Handler:
def button_1clicked(self, button):
print "Hello, World!"
builder = Gtk.Builder()
builder.add_from_file("myprogram.glade")
builder.connect_signals(Handler())
ournewbutton = builder.get_object("button1")
ournewbutton.set_label("Hello, World!")
window = builder.get_object("window1")
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
บันทึกไฟล์ ให้สิทธิ์ 755 เหมือนเมื่อก่อน และเรียกใช้โดยใช้ “./test.py ” และนั่นคือสิ่งที่คุณจะได้รับ
nano test.py
chmod 755 test.py
./test.py
คลิกที่ปุ่ม แล้วคุณจะสังเกตเห็นว่าประโยค “Hello, World! ” ถูกพิมพ์อยู่ในเทอร์มินัล
ตอนนี้เรามาอธิบายสิ่งใหม่ๆ:
- ตัวจัดการคลาส: ที่นี่ เรากำลังสร้างคลาสชื่อ “ตัวจัดการ” ซึ่งจะรวมคำจำกัดความสำหรับการดำเนินการและสัญญาณที่เราสร้างขึ้นสำหรับ GUI
- builder=Gtk.Builder(): เราได้สร้างตัวแปรส่วนกลางใหม่ชื่อ “builder ” ซึ่งเป็นวิดเจ็ต Gtk.Builder ซึ่งเป็นสิ่งสำคัญในการนำเข้าไฟล์ .glade
- builder.add_from_file(“myprogram.glade”): ที่นี่เรากำลังนำเข้าไฟล์ “myprogram.glade ” เพื่อใช้เป็น GUI เริ่มต้นสำหรับโปรแกรมของเรา
- builder.connect_signals(Handler()): บรรทัดนี้เชื่อมต่อไฟล์ .glade กับคลาส handler เพื่อให้การดำเนินการและสัญญาณที่เรากำหนดภายใต้คลาส “Handler ” ทำงานได้ดีเมื่อเรารันโปรแกรม .
- ournewbutton=builder.get_object(“button1”): ตอนนี้เรากำลังนำเข้าออบเจ็กต์ “button1 ” จากไฟล์ .glade เรายังส่งมันไปยังตัวแปรส่วนกลาง “ournewbutton ” เพื่อใช้งาน ต่อไปในโปรแกรมของเรา
- ournewbutton.set_label(“Hello, World!”): เราใช้เมธอด “set.label ” เพื่อตั้งค่าข้อความปุ่มเริ่มต้นเป็น “Hello, World! " ประโยค.
- window=builder.get_object(“window1”): ในที่นี้ เราเรียกอ็อบเจ็กต์ “window1” จากไฟล์ .glade เพื่อแสดงในภายหลังในโปรแกรม
และนั่นมัน! คุณสร้างโปรแกรมแรกของคุณภายใต้ Linux สำเร็จแล้ว!
แน่นอนว่ามีหลายสิ่งที่ซับซ้อนกว่าที่ต้องทำเพื่อสร้างแอปพลิเคชันจริงที่ทำบางสิ่งบางอย่าง นั่นคือเหตุผลที่ฉันแนะนำให้คุณดูเอกสารประกอบของ GTK+ และ GObject API ที่:
- คู่มืออ้างอิง GTK+
- การอ้างอิง Python GObject API
- การอ้างอิง PyGObject
คุณเคยพัฒนาแอพพลิเคชั่นใด ๆ มาก่อนภายใต้เดสก์ท็อป Linux หรือไม่? มีการใช้ภาษาและเครื่องมือการเขียนโปรแกรมอะไรในการทำสิ่งนี้? คุณคิดอย่างไรเกี่ยวกับการสร้างแอปพลิเคชันโดยใช้ Python & GTK 3