グラフィカルユーザーインターフェース(GUI)アプリケーションの作成は、アイデアを現実に結びつけ、プログラムをよりユーザーフレンドリーにする素晴らしい方法です。
PyGObjectは、開発者がLinuxデスクトップ環境でGTK(GIMP 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]
今、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]
ステップ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アプリケーションにより多くの機能を追加する
今は、アプリケーションを拡張し、より多くのウィジェットとインタラクティビティを追加しましょう。
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
関数はラベルのテキストを更新します。

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()
を使用して取り出し、ラベルに个性的な挨拶として表示します。

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は、Pythonを使用してLinuxデスクトップ上でGUIアプリケーションを作成する強力なツールです。Pythonの柔軟性と簡潔さを活用し、GTKの豊富な機能を利用して、機能が豊富で、視覚的に魅力的なアプリケーションを開発者が作成することができます。
このガイドでは、PyGObjectの基本設定、簡単なウィンドウの作成、按钮クリックの処理、ユーザー入力の追加、およびカスタムCSSスタイルの適用などをカバーしました。
これらの例を拡張することで、ファイルマネージャ、メディアプレイヤ、またはプロフェッショナルクラスのソフトウェアなどのより複雑なアプリケーションを構築することができます。PyGObjectとGTKを使用して、デスクトップアプリケーションの作成にはほぼ限りない可能性があります!
Source:
https://www.tecmint.com/pygobject-create-python-gui-application-linux/