GTK
GTK+ ウェブサイト より:
- GTK+ もしくは GIMP ツールキットはグラフィカルユーザーインターフェースを作成するためのマルチプラットフォームのツールキットです。ウィジェットの完全なセットを提供することで、GTK+ はちょっとしたツールから完全なアプリケーションスイートまで幅広いプロジェクトに適しています。
当初 GTK+ (GIMP Toolkit) は GNU Project によって GIMP のために作成されました、しかしながら現在ではさまざまな言語のバインディングの存在する人気のあるツールキットになっています。この記事では GTK+ テーマ・スタイル・アイコン・フォント・フォントサイズを設定するのに使うツールと手動設定の方法を詳しく伝えます。
設定プログラム
以下の GUI プログラムによってテーマを選択したりフォントをカスタマイズできます。基本的に ~/.gtkrc-2.0
ファイルを上書きします。
- lxappearance: LXDE プロジェクトの設定ツールで、LXDE や他のデスクトップ環境を必要としません。他のプログラムよりも柔軟なカスタマイズが可能です。
- gtk-chtheme
- gtk-theme-switch2
- gtk2_prefs
Uniform Look for Qt and GTK Applications#それぞれのツールキットのスタイルを変更する も参照してください。
テーマ
GTK+ 1.x
AUR には GTK+ 1.x テーマがたくさん存在します: gtk-theme で検索してください。gtk-smooth-engineAUR が最初のテーマとして良いでしょう。
ほとんどのデスクトップ環境は GTK+ テーマ・アイコン・フォント・フォントサイズを設定するためのツールを提供しています。
もしくは、gtk-theme-switch2 を使って下さい。switch
コマンドで実行できます。
GTK+ 2.x
AUR には GTK+ 2.x テーマがたくさん存在します: gtk2-theme で検索してください。初めにインストールするパッケージは gtk-engines がふさわしいでしょう、人気の Clearlooks テーマが含まれています。
ほとんどのデスクトップ環境は GTK+ テーマ・アイコン・フォント・フォントサイズを設定するためのツールを提供しています。
もしくは、~/.gtkrc-2.0
を編集することで手動で GTK+ の設定をすることも可能です。GTK+ の設定の一覧は GNOME library にあります。手動で GTK+ テーマ・アイコン・フォント・フォントサイズを変更するには、以下を ~/.gtkrc-2.0
に追加してください:
~/.gtkrc-2.0
gtk-icon-theme-name = "[name-of-icon-theme]" gtk-theme-name = "[name-of-theme]" gtk-font-name = "[font-name] [size]"
例えば:
~/.gtkrc-2.0
gtk-icon-theme-name = "Tango" gtk-theme-name = "Murrine-Gray" gtk-font-name = "DejaVu Sans 8"
GTK+ 3.x
初めにインストールするパッケージは gnome-themes-standard がふさわしいでしょう、人気の Adwaita テーマが含まれています。
選択したスタイルに GTK+ 2.x と GTK+ 3.x 両方のテーマが含まれている場合、それらが使われます。選択したスタイルに GTK+ 2.x テーマしかない場合、GTK+ 2.x アプリケーションにはそれが使われ、GTK+ 3.x アプリケーションには(醜い)デフォルトのテーマが使われます。選択したスタイルに GTK+ 3.x テーマしかない場合、GTK+ 3.x アプリケーションにはそれが使われ、GTK+ 2.x アプリケーションには(醜い)デフォルトのテーマが使われます。UI の外観を統一するために GTK+ 2.x と GTK+ 3.x 両方のテーマを持っているスタイルを使うと一番良い結果が得られます。
ほとんどのデスクトップ環境は GTK+ テーマ・アイコン・フォント・フォントサイズを設定するためのツールを提供しています。GNOME を使っている場合、GNOME Tweak Tool (gnome-tweak-tool) を使って下さい。Xfce を使っている場合、Appearance ツールを使って下さい: Settings-->Appearance から行けます。
他にも依存パッケージが少ないツールとして lxappearance があります。
テーママネージャを全くインストールしたくないという場合は、手動で $XDG_CONFIG_HOME/gtk-3.0/settings.ini
(普通は ~/.config/gtk-3.0/settings.ini
) にテーマを設定することができます。settings.ini
ファイルの例:
$XDG_CONFIG_HOME/gtk-3.0/settings.ini
[Settings] gtk-application-prefer-dark-theme = false gtk-theme-name = Zukitwo gtk-fallback-icon-theme = gnome gtk-icon-theme-name = [icon theme name] gtk-font-name = [font name] [font size]
手動設定が反映されないときは、$XDG_CONFIG_HOME
にある古い gtk-3.0
フォルダを削除して /path/to/theme から $XDG_CONFIG_HOME
に gtk-3.0
フォルダをコピーしてください。例えば:
$ rm -r ~/.config/gtk-3.0/ $ cp -r /usr/share/themes/Zukitwo/gtk-3.0/ ~/.config/
この後、DE の外観設定ツールで同じテーマを設定する必要があります。GTK+ 3.x と GTK+ 2.x アプリケーションで同じ見た目を提供するテーマはわずかしかありません。そうしたテーマの例:
- Adwaita (gnome-themes-standard に含まれています)
- Clearlooks-Phenix (AUR: clearlooks-phenix-gtk-themeAUR)
- GTK+ 3 用の Newlooks と GTK+ 2 用の Clearlooks
- Zukitwo
- Elegant Brit
- Atolm
- Hope
- OMG
インストールしたテーマでどれが GTK+ 2.x と GTK+ 3.x 両方のバージョンを持っているか調べるには次のコマンドを使って下さい (空白が含まれている名前はひっかかりません):
find $(find ~/.themes /usr/share/themes/ -wholename "*/gtk-3.0" | sed -e "s/^\(.*\)\/gtk-3.0$/\1/")\ -wholename "*/gtk-2.0" | sed -e "s/.*\/\(.*\)\/gtk-2.0/\1"/
GTK+ と Qt
デスクトップで GTK+ と Qt (KDE) アプリケーションを使っているならば、それらの見た目が上手く調和しないことに気づくでしょう。GTK+ スタイルと Qt スタイルを調和させたい場合は Uniform Look for Qt and GTK Applications を読んで下さい。
Broadway による GTK+ と HTML
GDK Broadway バックエンドは HTML5 とウェブソケットを使って、ウェブブラウザに GTK+ アプリケーションを表示することをサポートしています [1]。
broadwayd を使うときには、X と同じようにコロンを前に付けて、使用するディスプレイ番号を指定してください。デフォルトのディスプレイ番号は 1 です。
$ display_number=:5
次のコマンドで起動します。
$ broadwayd $display_number
デフォルトで使われるポートは:
port = 8080 + ($display_number - 1)
ブラウザで http://localhost:port を開いて下さい。
アプリを起動するには:
$ GDK_BACKEND=broadway BROADWAY_DISPLAY=$display_number <<app>>
また、アドレスやポートを設定することも可能です:
$ broadwayd --port $port_number --address $address $display_number
設定ファイル
このセクションでは GTK+ の設定ファイルなどで使うことができる GTK+ の設定をまとめて説明します。
(ini フォーマットの) GTK+ の設定ファイルは配置される場所が2つあります: $XDG_CONFIG_HOME/gtk-3.0/ (普通は ~/.config/gtk-3.0/) と /etc/gtk-3.0/ です。前者はユーザーごとの設定のためにあり、後者はシステム全体の設定のために存在します。
キーボードショートカットのカスタマイズを有効にする
マウスをメニューアイテムの上に乗せて設定したいキーボードのコンビネーションを押すことで GTK+ アプリケーションのキーボードショートカットをカスタマイズすることができます ただし、この機能はデフォルトでは無効になっています。この機能を有効にするには、次を設定してください:
gtk-can-change-accels = 1
GNOME メニューの高速化
この設定は GNOME でマウスをメニューに置いた時にメニューが開くまでの待ち時間を決めます。あなたの好きなように設定を変更してください。数字はミリ秒です、例えば 250 は1/4秒になります。
gtk-menu-popup-delay = 0
ウィジェットのサイズを小さくする
小さな画面を使っていて大きなアイコンやウィジェットを表示したくない場合、簡単にサイズを変えることができます。 ツールバーのアイコンに文章を表示しないようにするには、次を使って下さい:
gtk-toolbar-style = GTK_TOOLBAR_ICONS
小さいアイコンを使うには、次のような行を使って下さい:
gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-menu=16,16:gtk-large-toolbar=16,16\ :gtk-small-toolbar=16,16:gtk-button=16,16"
ボタンからアイコンを完全に削除するには:
gtk-button-images = 0
メニューからアイコンを削除することもできます:
gtk-menu-images = 0
ここ で説明されているようにテーマの gtkrc で設定をすることもでき、小さくする設定が全て行う テーマ もあります。
開発
スクラッチから C で GTK+ 3 プログラムを書く時は、CFLAGS を gcc に追加してください:
gcc -g -Wall `pkg-config --cflags --libs gtk+-3.0` -o base base.c
-g と -Wall パラメータはデバッグ出力をするためのものなので必須ではありません。 公式の Hello World サンプル も試してみてください。
シンプルなメッセージダイアログアプリ
GObject-Introspection やバインディングを使うことで多くのプログラミング言語で簡単に GTK+ 3 のメッセージダイアログを作ることができます、また bash を使うこともできます。
以下の例ではシンプルに "Hello world" をメッセージダイアログに表示します。
Bash
- 依存パッケージ: zenity
hello_world.sh
#!/bin/bash zenity --info --title='Hello world!' --text='This is an example dialog.'
Boo
- 依存パッケージ: AUR の gtk-sharp-3 (boo)
- ビルドするのに必要なパッケージ: boo
- ビルド:
booc hello_world.boo
- 実行:
mono hello_world.exe
(もしくはbooi hello_world.boo
)
hello_world.boo
import Gtk from "gtk-sharp" Application.Init() Hello = MessageDialog(null, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!") Hello.SecondaryText = "This is an example dialog." Hello.Run()
C
- 依存パッケージ: gtk3 と pkg-config
- ビルド:
gcc -o hello_world `pkg-config --cflags --libs gtk+-3.0` hello_world.c
hello_world.c
#include <gtk/gtk.h> void main (int argc, char *argv[]) { gtk_init (&argc, &argv); GtkWidget *hello = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Hello world!"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (hello), "This is an example dialog."); gtk_dialog_run(GTK_DIALOG (hello)); }
C++
- 依存パッケージ: gtkmm3
- ビルド:
g++ -o hello_world `pkg-config --cflags --libs gtkmm-3.0` hello_world.cc
hello_world.cc
#include <gtkmm/main.h> #include <gtkmm/messagedialog.h> int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); Gtk::MessageDialog Hello("Hello world!", false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK); Hello.set_secondary_text("This is an example dialog."); Hello.run(); }
C#
- 依存パッケージ: AUR の gtk-sharp-3
- ビルド:
mcs -pkg:gtk-sharp-3.0 hello_world.cs
- 実行:
mono hello_world.exe
hello_world.cs
using Gtk; public class HelloWorld { static void Main() { Application.Init (); MessageDialog Hello = new MessageDialog (null, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!"); Hello.SecondaryText="This is an example dialog."; Hello.Run (); } }
Genie
hello_world.gs
uses Gtk init Gtk.init (ref args) var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!") Hello.format_secondary_text ("This is an example dialog.") Hello.run ()
Java
- 依存パッケージ: AUR の java-gnomeAUR
- ビルドするのに必要なパッケージ: java-environment
- ビルド:
mkdir HelloWorld && javac -classpath /usr/share/java/gtk.jar -d HelloWorld HelloWorld.java
- 実行:
java -classpath /usr/share/java/gtk.jar:HelloWorld HelloWorld
HelloWorld.java
import org.gnome.gtk.Gtk; import org.gnome.gtk.Dialog; import org.gnome.gtk.InfoMessageDialog; public class HelloWorld { public static void main(String[] args) { Gtk.init(args); Dialog Hello = new InfoMessageDialog(null, "Hello world!", "This is an example dialog."); Hello.run(); } }
JavaScript
hello_world.js
#!/usr/bin/gjs Gtk = imports.gi.Gtk Gtk.init(null, null) Hello = new Gtk.MessageDialog({type: Gtk.MessageType.INFO, buttons: Gtk.ButtonsType.OK, text: "Hello world!", "secondary-text": "This is an example dialog."}) Hello.run()
Perl
- 依存パッケージ: AUR の perl-gtk3AUR
hello_world.pl
#!/usr/bin/perl use Gtk3 -init; my $hello = Gtk3::MessageDialog->new (undef, 'modal', 'info', 'ok', "Hello world!"); $hello->set ('secondary-text' => 'This is an example dialog.'); $hello->run;
Python
- 依存パッケージ: gtk3, python-gobject
hello_world.py
#!/usr/bin/python from gi.repository import Gtk Gtk.init(None) Hello=Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.CLOSE, "Hello world!") Hello.format_secondary_text("This is an example dialog.") Hello.run()
Vala
hello_world.vala
using Gtk; public class HelloWorld { static void main (string[] args) { Gtk.init (ref args); var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!"); Hello.format_secondary_text ("This is an example dialog."); Hello.run (); } }
Visual Basic .NET
- 依存パッケージ: AUR の gtk-sharp-3
- ビルドするのに必要なパッケージ: mono-basic
- ビルド:
vbnc -r:/usr/lib/mono/gtk-sharp-3.0/gio-sharp.dll -r:/usr/lib/mono/gtk-sharp-3.0/glib-sharp.dll -r:/usr/lib/mono/gtk-sharp-3.0/gtk-sharp.dll hello_world.vb
- 実行:
mono hello_world.exe
hello_world.vb
Imports Gtk Public Class Hello Inherits MessageDialog Public Sub New MyBase.New(Me, DialogFlags.Modal, MessageType.Info, ButtonsType.Close, "Hello world!") Me.SecondaryText = "This is an example dialog." End Sub Public Shared Sub Main Application.Init Dim Dialog As New Hello Dialog.Run End Sub End Class