ค้นหาเว็บไซต์

วิธีสร้างแอปพลิเคชัน 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:

  1. การเขียนส่วนต่อประสานกราฟิกโดยใช้โค้ดเท่านั้น
  2. การออกแบบอินเทอร์เฟซแบบกราฟิกโดยใช้โปรแกรม “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! ” พิมพ์ออกมาในเทอร์มินัล:

ให้ฉันอธิบายรหัสในการอธิบายโดยละเอียด

  1. #!/usr/bin/python: เส้นทางเริ่มต้นสำหรับล่าม Python (เวอร์ชัน 2.7 ในกรณีส่วนใหญ่) บรรทัดนี้ต้องเป็นบรรทัดแรกในทุกไฟล์ Python
  2. # -*- coding: utf-8 -*-: ที่นี่เราตั้งค่าการเข้ารหัสเริ่มต้นสำหรับไฟล์ UTF-8 นั้นดีที่สุดหากคุณต้องการรองรับภาษาที่ไม่ใช่ภาษาอังกฤษ ปล่อยไว้อย่างนั้น .
  3. จาก gi.repository import Gtk: ที่นี่เรากำลังนำเข้าไลบรารี GTK 3 เพื่อใช้ในโปรแกรมของเรา
  4. Class ourwindow(Gtk.Window): ที่นี่เรากำลังสร้างคลาสใหม่ซึ่งเรียกว่า "ourwindow" เรายังตั้งค่าประเภทอ็อบเจ็กต์คลาสเป็น "Gtk.Window "
  5. def __init__(self): ไม่มีอะไรใหม่ เรากำลังกำหนดส่วนประกอบของหน้าต่างหลักที่นี่
  6. Gtk.Window.__init__(self, title=”My Hello World Program”): เราใช้บรรทัดนี้เพื่อตั้งชื่อ “My Hello World Program ” เป็นหน้าต่าง “ourwindow ” คุณอาจเปลี่ยนแปลงได้ ชื่อถ้าคุณต้องการ
  7. Gtk.Window.set_default_size(self, 400,325): ฉันไม่คิดว่าบรรทัดนี้จำเป็นต้องมีคำอธิบาย ต่อไปนี้เราจะตั้งค่าความกว้างและความสูงเริ่มต้นสำหรับหน้าต่างของเรา
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): เมื่อใช้บรรทัดนี้ เราจะสามารถตั้งค่าตำแหน่งเริ่มต้นสำหรับหน้าต่างได้ ในกรณีนี้ เราตั้งค่าไว้ที่กึ่งกลาง โดยใช้พารามิเตอร์ “Gtk.WindowPosition.CENTER ” หากต้องการ คุณสามารถเปลี่ยนเป็น “Gtk.WindowPosition.MOUSE ” เพื่อเปิดหน้าต่างบนตำแหน่งตัวชี้เมาส์
  9. button1=Gtk.Button(“Hello, World!”): เราสร้าง Gtk.Button ใหม่ และเราเรียกมันว่า "button1 " ข้อความเริ่มต้นสำหรับปุ่มคือ "Hello, World! ” คุณสามารถสร้างวิดเจ็ต Gtk ได้หากต้องการ
  10. button1.connect(“clicked”, self.whenbutton1_clicked): ที่นี่ เรากำลังเชื่อมโยงสัญญาณ "คลิกแล้ว " กับการกระทำ "whenbutton1_clicked " ดังนั้นเมื่อมีการคลิกปุ่ม การกระทำ "whenbutton1_clicked " ถูกเปิดใช้งาน
  11. self.add(button1): หากเราต้องการให้วิดเจ็ต Gtk ของเราปรากฏขึ้น เราต้องเพิ่มวิดเจ็ตเหล่านั้นลงในหน้าต่างเริ่มต้น บรรทัดง่ายๆ นี้จะเพิ่มวิดเจ็ต “button1 ” ลงในหน้าต่าง ซึ่งจำเป็นมาก ทำเช่นนี้.
  12. def whenbutton1_clicked(self, button): ตอนนี้เรากำลังกำหนดการกระทำ "whenbutton1_clicked " ที่นี่ เรากำลังกำหนดสิ่งที่จะเกิดขึ้นเมื่อมีการคลิกวิดเจ็ต "button1 " "(self, ปุ่ม ) ” มีความสำคัญในการระบุประเภทออบเจ็กต์หลักของสัญญาณ
  13. พิมพ์ “Hello, World!”: ฉันไม่ต้องอธิบายเพิ่มเติมที่นี่
  14. window=ourwindow(): เราต้องสร้างตัวแปรโกลบอลใหม่และตั้งค่าเป็นคลาส ourwindow() เพื่อให้เราสามารถเรียกมันได้ในภายหลังโดยใช้ไลบรารี GTK+
  15. window.connect(“delete-event”, Gtk.main_quit): ตอนนี้เรากำลังเชื่อมต่อสัญญาณ “delete-event ” กับการดำเนินการ “Gtk.main_quit ” ซึ่งเป็นสิ่งสำคัญในการที่จะลบ วิดเจ็ตทั้งหมดหลังจากที่เราปิดหน้าต่างโปรแกรมของเราโดยอัตโนมัติ
  16. window.show_all(): การแสดงหน้าต่าง
  17. 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! ” ถูกพิมพ์อยู่ในเทอร์มินัล

ตอนนี้เรามาอธิบายสิ่งใหม่ๆ:

  1. ตัวจัดการคลาส: ที่นี่ เรากำลังสร้างคลาสชื่อ “ตัวจัดการ” ซึ่งจะรวมคำจำกัดความสำหรับการดำเนินการและสัญญาณที่เราสร้างขึ้นสำหรับ GUI
  2. builder=Gtk.Builder(): เราได้สร้างตัวแปรส่วนกลางใหม่ชื่อ “builder ” ซึ่งเป็นวิดเจ็ต Gtk.Builder ซึ่งเป็นสิ่งสำคัญในการนำเข้าไฟล์ .glade
  3. builder.add_from_file(“myprogram.glade”): ที่นี่เรากำลังนำเข้าไฟล์ “myprogram.glade ” เพื่อใช้เป็น GUI เริ่มต้นสำหรับโปรแกรมของเรา
  4. builder.connect_signals(Handler()): บรรทัดนี้เชื่อมต่อไฟล์ .glade กับคลาส handler เพื่อให้การดำเนินการและสัญญาณที่เรากำหนดภายใต้คลาส “Handler ” ทำงานได้ดีเมื่อเรารันโปรแกรม .
  5. ournewbutton=builder.get_object(“button1”): ตอนนี้เรากำลังนำเข้าออบเจ็กต์ “button1 ” จากไฟล์ .glade เรายังส่งมันไปยังตัวแปรส่วนกลาง “ournewbutton ” เพื่อใช้งาน ต่อไปในโปรแกรมของเรา
  6. ournewbutton.set_label(“Hello, World!”): เราใช้เมธอด “set.label ” เพื่อตั้งค่าข้อความปุ่มเริ่มต้นเป็น “Hello, World! " ประโยค.
  7. window=builder.get_object(“window1”): ในที่นี้ เราเรียกอ็อบเจ็กต์ “window1” จากไฟล์ .glade เพื่อแสดงในภายหลังในโปรแกรม

และนั่นมัน! คุณสร้างโปรแกรมแรกของคุณภายใต้ Linux สำเร็จแล้ว!

แน่นอนว่ามีหลายสิ่งที่ซับซ้อนกว่าที่ต้องทำเพื่อสร้างแอปพลิเคชันจริงที่ทำบางสิ่งบางอย่าง นั่นคือเหตุผลที่ฉันแนะนำให้คุณดูเอกสารประกอบของ GTK+ และ GObject API ที่:

  1. คู่มืออ้างอิง GTK+
  2. การอ้างอิง Python GObject API
  3. การอ้างอิง PyGObject

คุณเคยพัฒนาแอพพลิเคชั่นใด ๆ มาก่อนภายใต้เดสก์ท็อป Linux หรือไม่? มีการใช้ภาษาและเครื่องมือการเขียนโปรแกรมอะไรในการทำสิ่งนี้? คุณคิดอย่างไรเกี่ยวกับการสร้างแอปพลิเคชันโดยใช้ Python & GTK 3