「GTK」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
imported>Lahwaacz.bot
(update Pkg/AUR templates to reflect new package status)
 
(1版 をインポートしました)
(相違点なし)

2015年1月7日 (水) 11:27時点における版

関連記事

GTK+ ウェブサイト より:

GTK+ もしくは GIMP ツールキットはグラフィカルユーザーインターフェースを作成するためのマルチプラットフォームのツールキットです。ウィジェットの完全なセットを提供することで、GTK+ はちょっとしたツールから完全なアプリケーションスイートまで幅広いプロジェクトに適しています。

当初 GTK+ (GIMP Toolkit) は GNU Project によって GIMP のために作成されました、しかしながら現在ではさまざまな言語のバインディングの存在する人気のあるツールキットになっています。この記事では GTK+ テーマ・スタイル・アイコン・フォント・フォントサイズを設定するのに使うツールと手動設定の方法を詳しく伝えます。

設定プログラム

以下の GUI プログラムによってテーマを選択したりフォントをカスタマイズできます。基本的に ~/.gtkrc-2.0 ファイルを上書きします。

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"
ノート: 上の例を使うには公式リポジトリから ttf-dejavu, tangerine-icon-theme, gtk-engine-murrine が、AUR から gtk-theme-murrine-collectionAUR が必要です。

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_HOMEgtk-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 アプリケーションで同じ見た目を提供するテーマはわずかしかありません。そうしたテーマの例:

  1. Adwaita (gnome-themes-standard に含まれています)
  2. Clearlooks-Phenix (AUR: clearlooks-phenix-gtk-themeAUR)
  3. GTK+ 3 用の Newlooks と GTK+ 2 用の Clearlooks
  4. Zukitwo
  5. Elegant Brit
  6. Atolm
  7. Hope
  8. OMG
ノート: テーマによっては正しく表示するために librsvg が必要になりますが、依存パッケージとして指定されていないことがあります。選んだテーマが壊れて見えるようでしたらインストールしてみて下さい。
ノート: 他にも両方兼ね備えたテーマがあるかもしれません。上のテーマの内いくつかは AUR で利用できます。また、テーマによっては GTK+ 2.x パネルを正しく表示することができないため、この パネルの背景 を使う必要があります。

インストールしたテーマでどれが 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+ プログラミングリファレンスマニュアルの GtkSettings properties を見て下さい。

このセクションでは 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

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

  • 依存パッケージ: gtk3pkg-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

  • 依存パッケージ: gtk3
  • ビルドするのに必要なパッケージ: vala
  • ビルド: valac --pkg gtk+-3.0 hello_world.gs
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

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

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

  • 依存パッケージ: gtk3
  • ビルドするのに必要なパッケージ: vala
  • ビルド: valac --pkg gtk+-3.0 hello_world.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

資料