Gtk+で日本語を使うには

 さて、今度はそのウィンドウに2つのウィジェットを載せる例とともに、 Gtk+で日本語の文字列を表示する方法をメモってみます。

#include <stdio.h>
#include "gtk/gtk.h"

static void destroySignalProc(GtkWidget* w, gpointer data){
  gtk_main_quit();
}

static void clickedSignalProc(GtkWidget* w, gpointer data){
  gtk_main_quit();
}

int main(int argc, char* argv[]){
  GtkWidget* w, * vbox, * laba, * cmda;

  gtk_init(& argc, & argv);
  w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_widget_set_usize(w, 200, 100);
  vbox = gtk_vbox_new(0, 0);

  /* これで日本語が使えるようになります。 */
  gtk_set_locale();
  /* 日本語EUCで書くこと */
  laba = gtk_label_new("世界よこんにちは");
  cmda = gtk_button_new_with_label("終了");

  gtk_container_set_border_width(GTK_CONTAINER(w), 4);
  gtk_box_pack_start(GTK_BOX(vbox), laba, 1, 0, 0);
  gtk_box_pack_start(GTK_BOX(vbox), cmda, 0, 0, 0);
  gtk_container_add(GTK_CONTAINER(w), vbox);

  gtk_signal_connect(GTK_OBJECT(w), "destroy",
                     GTK_SIGNAL_FUNC(destroySignalProc), NULL);
  gtk_signal_connect(GTK_OBJECT(cmda), "clicked",
                     GTK_SIGNAL_FUNC(clickedSignalProc), NULL);
  gtk_widget_show(laba);
  gtk_widget_show(cmda);
  gtk_widget_show(vbox);
  gtk_widget_show(w);
  gtk_main();
  return 0;
}
/* end. */

 Gtk+で日本語を表示する大前提は、 です。 前者は、ここで若干メモっているのでご覧ください。 そして、ソースプログラムで日本語を表示するために必要なことは、 です。Unicodeの一種UTF-8で日本語を実装している Java AWT や Tcl/Tk と違い、 Gtk+では日本語といっても日本語EUC以外のコードは今のところ使えないようです。 さらに、このプログラムを実行するときには、次の2点が必要です。 前者は、例えばこのようなファイルを作ってホームディレクトリに「.gtkrc」 という名前で保存すればOKです:

style "default" {
  fontset = "-adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1,\
             -misc-fixed-medium-r-normal--14-*-*-*-*-*-jisx0208.1983-0"
}
class "GtkWidget" style "default"

 後者は、ホームディレクトリの .login、.cshrcまたは .xinitrc でたとえばcsh系のシェルなら

setenv LANG ja_JP.ujis
となるでしょう(.xinitrcはsh系のスクリプトです)。 このプログラムを先程と同様にコンパイルして実行すると、このようになります。

スクリーンショット

 さて、先述の通り、ウィンドウの上には直接は1個のウィジェットしか載せられません。 この例では、ウィンドウの上に垂直パッキングボックスを載せ、 その上にラベルとボタンを載せています。

vbox = gtk_vbox_new(0, 0);
laba = gtk_label_new("ラベルのテキスト");
cmda = gtk_button_new_with_label("ボタンのテキスト");

gtk_box_pack_start(GTK_BOX(vbox), laba, 1, 0, 0);
gtk_box_pack_start(GTK_BOX(vbox), cmda, 1, 0, 0);

gtk_container_add(GTK_CONTAINER(window), vbox);

gtk_widget_show(laba);
gtk_widget_show(cmda);
gtk_widget_show(vbox);

gtk_widget_show(window);

セクションのサブメニューに戻る
(first uploaded 2000/03/09 last updated 2002/03/25)