PyGObject: دليل لإنشاء تطبيقات واجهة المستخدم الرسومية في Linux باستخدام Python

تأسيس تطبيقات واجهة مستخدم جرافيكية (GUI) هو طريقة رائعة لتحقيق أفكارك وجعل برامجك أكثر صلابة للمستخدمين.

PyGObject هي مكتبة بيثونية تسمح للمطورين بإنشاء تطبيقات GUI في بيئات الحاسوب اللينكسية باستخدام شاشة معرفية GTK (GIMP Toolkit). يتم استخدام GTK بشكل واسع في بيئات اللينكس، ويقوم بتوليد العديد من التطبيقات السريرية المشهورة مثل Gedit، طرف النموذج GNOME وما إلى ذلك.

في هذه المقالة، سنقوم بإستكشاف كيفية إنشاء تطبيقات GUI في بيئة سطح المكتب اللينكسية باستخدام PyGObject. سنبدأ بفهم ما هو PyGObject، كيف يمكن تثبيته، ومن ثم سنتقدم إلى بناء تطبيق GUI بسيط.

خطوة 1: تثبيت Python و GTK في Linux

للعمل مع PyGObject، يتوجب عليك تثبيت Python، ومعظم التوزيعات اللينكسية اليوم تأتي ب Python مسبق التثبيت، ولكن يمكنك تأكد بتشغيل:

python3 --version

Python 3.12.3

إذا كان Python غير متوفر، يمكنك تثبيته باستخدام الأوامر الملائمة لتوزيعك الخاص.

sudo apt install python3       [On Debian, Ubuntu and Mint]
sudo dnf install python3       [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add python3           [On Alpine Linux]
sudo pacman -S python          [On Arch Linux]
sudo zypper install python3    [On OpenSUSE]    

والآن، يتوجب عليك تثبيت ألخصائص PyGObject لـ Python، وأيضًا مكتبات التطوير الخاصة بـ GTK.

sudo apt install python3-gi gir1.2-gtk-3.0    [On Debian, Ubuntu and Mint]
sudo dnf install python3-gobject gtk3         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject gtk+3                [On Alpine Linux]
sudo pacman -S python-gobject gtk3            [On Arch Linux]
sudo zypper install python3-gobject gtk3      [On OpenSUSE] 

plaintext
خطوة 2: تثبيت PyGObject في لينكس

بمجرد تثبيت برامج التطوير الخاصة بPython وGTK، يمكنك الآن تثبيت PyGObject باستخدام الأمر المناسب لتوزيع لينكسك.

sudo apt install python3-gi           [On Debian, Ubuntu and Mint]
sudo dnf install pygobject3           [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apk add py3-gobject              [On Alpine Linux]
sudo pacman -S python-gobject         [On Arch Linux]
sudo zypper install python3-gobject   [On OpenSUSE]    

بعد التثبيت، يمكنك البدء في تطوير تطبيقات الواجهة الرسومية باستخدام PyGObject و GTK.

إنشاء أول تطبيق واجهة رسومية PyGObject في لينكس

الآن، دعونا نبني تطبيق PyGObject بسيط يعرض نافذة بزر. عند الضغط على الزر، سيظهر رسالة تقول “مرحبا، العالم!“.

إنشاء ملف Python يسمى app.py، ودعونا نبدأ بكتابة هيكل أساسي لتطبيق PyGObject.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World App")
        self.set_size_request(300, 100)

        # Creating a button and adding it to the window
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        self.add(button)

    def on_button_clicked(self, widget):
        print("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)  # Close the app when window is closed
app.show_all()
Gtk.main()

شرح الكود:

  • السطرين الأولين يستوردون الوحدات اللازمة لـ PyGObject. نحن نحدد الإصدار الذي نريد استخدامه لـ GTK (3.0 في هذه الحالة).
  • ترث الصفة MyApp من Gtk.Window، والتي تمثل النافذة الرئيسية للتطبيق.
  • نقوم بإنشاء زر باستخدام Gtk.Button، ويتم تعيين وصف الزر إلى “اضغط هنا“. ونربط إشارة الزر “الالضغط” إلى الطريقة on_button_clicked، التي تطبع “مرحبا، العالم!” عند الضغط على الزر.
  • يبدأ دائرة المهمة الرئيسية للتطبيق بالتنفيذ Gtk.main(). هذه الدائرة تنتظر الأحداث (مثل النقرات) وتحدث التطبيق بما يليق.

لتشغيل التطبيق، قم بالتوجه إلى المجلد الذي حفظت فيه ملف app.py وأجراء أوامر التواصل التالية:

python3 app.py

ستظهر نافذة تحتوي على زر تمت تسميته “Click Me“. عندما تنقر في الزر، سيتم طباعة “Hello, World!” في المحطة.

PyGObject GUI Application

إضافة مزيد من الميزات لتطبيقك البايغوبولوجي

دعونا نوسع تطبيقنا الآن بإضافة أكثر من الأوامر التفاعلية.

1. إضافة تسمية

يمكننا تحسين تطبيقنا بإضافة تسمية Gtk.Label لعرض الرسائل في النافذة بدلاً من طباعتها في المحطة.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Enhanced GUI App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create a label
        self.label = Gtk.Label(label="Press the button to see a message")
        vbox.pack_start(self.label, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Click Me")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

    def on_button_clicked(self, widget):
        self.label.set_text("Hello, World!")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

تفسير التغييرات:

  • لقد استخدمنا Gtk.Box لتنظيم الأوامر التفاعلية أفقاً، مما سيساعدنا على ترتيب التسمية والزر واحد بموجة آخر.
  • تم إضافة وidget Gtk.Label لعرض رسالة داخل النافذة.
  • بدلاً من طباعة المحطة، يتم الآن تحديث نص التسمية في معالجة الزر “on_button_clicked”.
PyGObject GUI Application with Label

2. إضافة مجالات إدخال للمعلومات الشخصية

بعد ذلك، دعونا نضيف وidget Gtk.Entry للمعلومات الشخصية التي ستسمح لنا بإنشاء تطبيق بسيط حيث يمكن للمستخدمين إدخال أسماءهم والنقر في زر لعرض تحية شخصية.

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="User Input App")
        self.set_size_request(400, 200)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

تفسير البرمجيات:

  • ال Gtk.Entry هو مجال إدخال حيث يمكن للمستخدمين كتابة أسماءهم.
  • يوجد في هذا المجال التعليمي “set_placeholder_text” لعرض ت
  • أنت تلمس الزر، ومن ثم يتم استرجاع الاسم المدخل باستخدام get_text() ويعرض في العنصر التعريفي كترحيب شخصي.

PyGObject GUI Application with User Input

3. تنسيق تطبيقك بواسطة CSS

PyGObject يسمح لك بتطبيق أنماط شخصية على ويدجتات تطبيقك باستخدام ملف CSS يُدعى style.css.

window {
    background-color: #f0f0f0;
}

button {
    background-color: #4CAF50;
    color: white;
    border-radius: 5px;
    padding: 10px;
}

label {
    font-size: 16px;
    color: #333;
}

الآن، قم بتعديل الكود البايثوني لتحميل وتطبيق هذا الملف CSS:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, Gdk

class MyApp(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="Styled GUI App")
        self.set_size_request(400, 200)

        # Load CSS
        css_provider = Gtk.CssProvider()
        css_provider.load_from_path("style.css")
        screen = Gdk.Screen.get_default()
        style_context = Gtk.StyleContext()
        style_context.add_provider_for_screen(screen, css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)

        # Create a vertical box layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10)
        self.add(vbox)

        # Create an Entry widget for user input
        self.entry = Gtk.Entry()
        self.entry.set_placeholder_text("Enter your name")
        vbox.pack_start(self.entry, True, True, 0)

        # Create a button
        button = Gtk.Button(label="Submit")
        button.connect("clicked", self.on_button_clicked)
        vbox.pack_start(button, True, True, 0)

        # Create a label to display the greeting
        self.label = Gtk.Label(label="")
        vbox.pack_start(self.label, True, True, 0)

    def on_button_clicked(self, widget):
        name = self.entry.get_text()
        if name:
            self.label.set_text(f"Hello, {name}!")
        else:
            self.label.set_text("Please enter your name.")

# Initialize the application
app = MyApp()
app.connect("destroy", Gtk.main_quit)
app.show_all()
Gtk.main()

شرح التغييرات في CSS:

  • يحتوي الزر على خلفية خضراء، ويحتوي العناصر التعريفية على حجم خط ولون مخصص.
  • تحتوي حواف الزر على أوجه مدورة لمظهر حديث.
PyGObject GUI Application with CSS Styling
الخاتمة

PyGObject هو أداة قوية لإنشاء تطبيقات واجهة المستخدم على سطح مكتب لينكس باستخدام بايثون. من خلال الاستفادة من القابلية والبساطة الخاصة ببايثون بالإضافة إلى ميزات GTK الغنية، يمكن للمطورين إنشاء تطبيقات ممتلئة بالميزات ومرئية جميلة.

في هذا الدليل، تغطينا الأساسيات في إعداد PyGObject، إنشاء نافذة بسيطة، التعامل مع نقرات الزر، وإضافة إدخال من المستخدم، وحتى تطبيق أنماط CSS شخصية.

يمكنك توسيع هذه الأمثلة لبناء تطبيقات أكثر تعقيداً، كـ مديرات الملفات، مشغلات الوسائط، أو حتى تطبيقات من الدرجة الاحترافية. مع PyGObject وGTK، إمكانيات إنشاء تطبيقات سطح المكتب تقتصر لا سيما!

Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/