LinuxでPyGObjectを使用してGUIアプリケーションを作成する方法
グラフィカルユーザーインターフェース(GUI)アプリケーションを作成することは、アイデアを形にし、プログラムをよりユーザーフレンドリーにする素晴らしい方法です。
PyGObjectは、開発者がGTK(GIMPツールキット)フレームワークを使用してLinuxデスクトップ上でGUIアプリケーションを作成できるPythonライブラリです。GTKはLinux環境で広く使用されており、Gedit、GNOME端末など、多くの人気デスクトップアプリケーションを支えています。
この記事では、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]
次に、Python用のPyGObjectバインディングと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アプリケーションを作りましょう。ボタンがクリックされると、「こんにちは、世界!」というメッセージが表示されます。
app.py という名前のPythonファイルを作成し、私たちの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
「クリックして下さい」と書かれたボタンがあるウィンドウが表示されます。ボタンをクリックすると、「こんにちは、世界!」と端末に印刷されます。
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メソッドは、ユーザーが何かを入力するまで、エントリーボックス内にヒントを表示します。- ボタンをクリックした後、入力された名前は
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;
}
さて、Pythonコードを修正してこの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 は、Pythonを使用してLinuxデスクトップ上でGUIアプリケーションを作成するための強力なツールです。Pythonの柔軟性とシンプルさを活かし、GTKの豊富な機能を組み合わせることで、開発者は機能が豊かで視覚的に魅力的なアプリケーションを作成することができます。
このガイドでは、PyGObjectの基本的な設定、シンプルなウィンドウの作成、ボタンクリックの処理、ユーザー入力の追加、さらにはカスタムCSSスタイルの適用について説明しました。
これらの例を拡張して、ファイルマネージャー、メディアプレーヤー、さらにはプロフェッショナルグレードのソフトウェアなど、より複雑なアプリケーションを構築することができます。PyGObjectとGTKを使えば、デスクトップアプリケーションの作成における可能性はほぼ無限大です!



