Glade
表示
Gladeの概要
[編集]Gladeは、GTKアプリケーションのGUIを視覚的に設計できるツールです。UIデザインをXMLファイルとして保存し、プログラムから読み込むことができます。
インストール方法
[編集]# Debian/Ubuntu sudo apt-get install glade # Fedora sudo dnf install glade # Arch Linux sudo pacman -S glade
基本的な使用方法
[編集]Gladeファイルの読み込み(Python)
[編集]import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class MainWindow: def __init__(self): # Builderオブジェクトの作成 self.builder = Gtk.Builder() # Gladeファイルの読み込み self.builder.add_from_file("interface.glade") # シグナルの自動接続 self.builder.connect_signals(self) # メインウィンドウの取得 self.window = self.builder.get_object("main_window") self.window.connect("destroy", Gtk.main_quit) # ウィジェットの表示 self.window.show_all() def on_button1_clicked(self, button): print("Button clicked!") app = MainWindow() Gtk.main()
ウィジェットの設計と配置
[編集]基本的なレイアウト構造
[編集]<?xml version="1.0" encoding="UTF-8"?> <interface> <requires lib="gtk+" version="3.0"/> <object class="GtkWindow" id="main_window"> <property name="title">My Application</property> <child> <object class="GtkBox"> <property name="orientation">vertical</property> <property name="spacing">6</property> <child> <object class="GtkLabel"> <property name="label">Welcome!</property> </object> </child> <child> <object class="GtkButton" id="button1"> <property name="label">Click Me</property> <signal name="clicked" handler="on_button1_clicked"/> </object> </child> </object> </child> </object> </interface>
シグナルとハンドラの設定
[編集]シグナル接続の実装例
[編集]class SignalHandler: def on_window_destroy(self, window): Gtk.main_quit() def on_button1_clicked(self, button): dialog = Gtk.MessageDialog( parent=window, flags=0, message_type=Gtk.MessageType.INFO, buttons=Gtk.ButtonsType.OK, text="Button Clicked!" ) dialog.run() dialog.destroy() builder = Gtk.Builder() builder.add_from_file("interface.glade") builder.connect_signals(SignalHandler())
高度なウィジェット設定
[編集]ListStoreとTreeViewの設定
[編集]<object class="GtkListStore" id="liststore1"> <columns> <column type="gchararray"/> <column type="gchararray"/> <column type="gint"/> </columns> <data> <row> <col id="0">John</col> <col id="1">Developer</col> <col id="2">30</col> </row> </data> </object> <object class="GtkTreeView" id="treeview1"> <property name="model">liststore1</property> <child> <object class="GtkTreeViewColumn"> <property name="title">Name</property> <child> <object class="GtkCellRendererText"/> <attributes> <attribute name="text">0</attribute> </attributes> </child> </object> </child> </object>
カスタムウィジェットの作成
[編集]カスタムコンポーネント定義
[編集]@Gtk.Template(filename="custom_widget.glade") class CustomWidget(Gtk.Box): __gtype_name__ = 'CustomWidget' label = Gtk.Template.Child() button = Gtk.Template.Child() def __init__(self, **kwargs): super().__init__(**kwargs) @Gtk.Template.Callback() def on_button_clicked(self, button): self.label.set_text("Button was clicked!")
データバインディングとプロパティ
[編集]GtkBuilder XMLでのバインディング
[編集]<object class="GtkEntry" id="name_entry"> <property name="text" bind-source="person" bind-property="name" bind-flags="bidirectional"/> </object>
レスポンシブデザイン
[編集]GtkStack使用例
[編集]<object class="GtkStack" id="stack"> <property name="transition-type">slide-left-right</property> <child> <object class="GtkBox" id="page1"> <property name="name">page1</property> <!-- ページ1のコンテンツ --> </object> </child> <child> <object class="GtkBox" id="page2"> <property name="name">page2</property> <!-- ページ2のコンテンツ --> </object> </child> </object>
CSSスタイリング
[編集]スタイル定義
[編集].custom-button { background-color: #4CAF50; color: white; border-radius: 4px; padding: 8px; } .header-label { font-size: 18px; font-weight: bold; }
スタイルの適用
[編集]<object class="GtkButton"> <property name="label">Styled Button</property> <style> <class name="custom-button"/> </style> </object>
ベストプラクティス
[編集]プロジェクト構造
[編集]project/ ├── src/ │ ├── main.py │ └── handlers.py ├── ui/ │ ├── main_window.glade │ └── custom_widget.glade └── css/ └── style.css
リソース管理
[編集]<?xml version="1.0" encoding="UTF-8"?> <gresources> <gresource prefix="/org/example/app"> <file preprocess="xml-stripblanks">ui/main_window.glade</file> <file>css/style.css</file> </gresource> </gresources>
エラー処理
[編集]try: builder = Gtk.Builder() builder.add_from_file("interface.glade") except GLib.Error as e: print(f"Error loading UI file: {e.message}") sys.exit(1)
Gladeを使用することで、GTKアプリケーションのUI開発が大幅に効率化されます。視覚的なデザインツールとプログラムコードの分離により、メンテナンス性も向上します。