PyGObject: LinuxでPython GUIアプリケーションを作成するためのガイド

グラフィカルユーザーインターフェース(GUI)アプリケーションの作成は、アイデアを現実に結びつけ、プログラムをよりユーザーフレンドリーにする素晴らしい方法です。

PyGObjectは、開発者がLinuxデスクトップ環境でGTKGIMP Toolkit)フレームワークを使用してGUIアプリケーションを作成することができるPythonライブラリです。GTKはLinux環境で广く使用されていて、多くの人気のあるデスクトップアプリケーションの如Edit, Gedit, GNOME terminalなどを支えています。

この記事では、PyGObjectを使用してLinuxデスクトップ環境下でGUIアプリケーションを作成する方法を調査します。私たちはPyGObjectとは何であり、どのようにインストールするかを理解し、その後、簡単なGUIアプリケーションを構築します。

手順1:LinuxでPythonとGTKのインストール

PyGObjectを使用するためには、Pythonがインストールされている必要があります。今日の多くのLinuxディストリビューションではPythonが事前にインストールされていますが、実行してみてください。

python3 --version

Python 3.12.3

もしPythonがインストールされていない場合、あなたの独自のLinuxディストリビューションに適したコマンドを使用してインストールすることができます。

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]    

今、PyGObjectPythonに対するバインディングと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] 

ステップ2: LinuxでPyGObjectをインストールする

PythonとGTK開発ライブラリがインストールされた後、特定のLinuxディストリビューションに合わせた適切なコマンドを使用して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を使用してGUIアプリケーションの開発を始める準備ができます。

Linuxで初めてのPyGObject GUIアプリケーションを作成する

今、PyGObject应用程序を作成して、押したときに「Hello, World!」というメッセージを表示するウィンドウを表示する簡単なものを作成してみましょう。

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()

コードの説明:

  • 最初の2行は必要なPyGObjectモジュールをインポートします。この場合は使用したいGTKバージョン(3.0)を指定します。
  • MyAppクラスはGtk.Windowクラスを継承しており、アプリケーションのメインウィンドウを表します。
  • 按钮をGtk.Buttonを使用して作成し、按钮のラベルを「Click Me」に設定します。また、按钮の「clicked」シグナルをon_button_clickedメソッドに接続し、押されたときに「Hello, World!」を印刷します。
  • アプリケーションのメインループはGtk.main()を呼び出して開始されます。このループはイベント(押したり)を待ち、アプリケーションに対して更新を行います。

アプリケーションを実行するには、app.py ファイルを保存したディレクトリに移動し、以下のコマンドを実行します。

python3 app.py

Click Me」というラベルのあるウィンドウが表示されます。このボタンを押すと、「Hello, World!」がターミナルに表示されます。

PyGObject GUI Application

PyGObjectアプリケーションにより多くの機能を追加する

今は、アプリケーションを拡張し、より多くのウィジェットとインタラクティビティを追加しましょう。

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 を使用し、ラベルとボタンを順番に配置することができます。
  • Gtk.Label ウィジェットを追加し、ウィンドウ内にメッセージを表示します。
  • ターミナルにプリントする代わりに、on_button_clicked 関数はラベルのテキストを更新します。
PyGObject GUI Application with Label

2. ユーザー入力用のエントリーフィールドの追加

次に、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` メソッドは、ユーザーが何か入力している前に入力ボックス内にヒントを表示します。
  • buttonを押すと、入力した名前をget_text()を使用して取り出し、ラベルに个性的な挨拶として表示します。
PyGObject GUI Application with User Input

3. CSSを使用してアプリケーションのスタイリング

PyGObjectは、style.cssというCSSファイルを使用して、アプリケーションのウィジェットにカスタムスタイルを適用することができます。

window {
    background-color: #f0f0f0;
}

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

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

今、このCSSファイルを読み込み、適用するPythonコードを変更しましょう:

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変更の説明:

  • ボタンには緑色の背景があり、ラベルにはカスタムのフォントサイズと色があります。
  • ボタンの境界線は丸角のもので、 modernな外見をしています。
PyGObject GUI Application with CSS Styling
結論

PyGObjectは、Pythonを使用してLinuxデスクトップ上でGUIアプリケーションを作成する強力なツールです。Pythonの柔軟性と簡潔さを活用し、GTKの豊富な機能を利用して、機能が豊富で、視覚的に魅力的なアプリケーションを開発者が作成することができます。

このガイドでは、PyGObjectの基本設定、簡単なウィンドウの作成、按钮クリックの処理、ユーザー入力の追加、およびカスタムCSSスタイルの適用などをカバーしました。

これらの例を拡張することで、ファイルマネージャメディアプレイヤ、またはプロフェッショナルクラスのソフトウェアなどのより複雑なアプリケーションを構築することができます。PyGObjectGTKを使用して、デスクトップアプリケーションの作成にはほぼ限りない可能性があります!

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