新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

gtk2-tut-label

ラベル

ラベルはGTKではよく使われるウィジェットで比較的単純なものである. ラベルは対応するXのウィンドウを持たないのでシグナルを発行しない. もしシグナルを拾ったり,あるいはクリッピングを行いたければイベントボックスウィジェットボタンウィジェットの中にラベルを配置する必要がある.

新規にラベルを作成する

Gtk::Label.new(str, use_underline = nil)

label1.png 第一引数はラベルに表示したい文字列である. 第二引数がtrueの場合,str中の'_'は次の文字の下線として表示される. '_'自身を表示したい場合は'__'のように'_'を続けて2つ書けばよい.

% irb
irb(main):001:0> require 'gtk2'
=> true
irb(main):003:0> l = Gtk::Label.new("_under_line")
=> #<Gtk::Label:0x0a29a070 ptr=0x0a351338>
irb(main):004:0> w = Gtk::Window.new.add(l).show_all
=> #<Gtk::Window:0x0a296848 ptr=0x0a356f80>
irb(main):005:0> w.signal_connect("destroy") {Gtk.main_quit}
=> 5
irb(main):006:0> Thread.start {Gtk.main}
=> #<Thread:0xa2938c0 run>

下線による装飾

下線による装飾を使用するかどうかは,次のメソッドで指定することもできる.

Gtk::Label#set_use_underline(underline)
Gtk::Label#use_underline=(underline)

label2.png もちろん現在の状態はGtk::Label#use_underline?で取得できる.

irb(main):007:0> l.use_underline?
=> false
irb(main):008:0> l.use_underline = true
=> true
irb(main):009:0> l.use_underline?
=> true

ラベルテキストの変更

ラベル作成後にテキストを変更するには次のメソッドを使う:

Gtk::Label#set_text(str, mnemonic = false)
Gtk::Label#text=(str)

引数には新しい文字列を指定する.

新しい文字列を表示するのに必要なスペースは必要なら自動的に調整される. ラベルの文字列中に改行を入れることで複数行のラベルを作成できる.

label3.png 現在ラベルに設定されている文字列を取得するにはGtk::Label#textを用いる.

irb(main):010:0> l.text
=> "underline"
irb(main):011:0> l.use_underline = false
=> false
irb(main):012:0> l.text
=> "_under_line"          ← use_underlineの状態で得られるテキストが違う
irb(main):013:0> l.text = "multi-line label\nby line\nbreaks"
=> "multi-line label\nby line\nbreaks"

表示位置の変更

ラベルのテキストは次のメソッドを使って位置を調整できる.

Gtk::Label#set_justify(jtype)
Gtk::Label#justify=(jtype)

jtypeで指定できる値は

Gtk::JUSTIFY_LEFT
Gtk::JUSTIFY_RIGHT
Gtk::JUSTIFY_CENTER (デフォルト)
Gtk::JUSTIFY_FILL

label4.png の4種類の定数である*1

irb(main):014:0> l.justify = Gtk::JUSTIFY_CENTER
=> 2

下線による装飾(その2)

Gtk::Label#set_pattern(pattern)
Gtk::Label#pattern=(pattern)

pattern引数はアンダースコア文字とスペース文字から成り,下線をどのように引くかを指定する. アンダースコアはラベルテキスト中の同じ位置の文字に下線を引くことを表す. 例えば文字列

"__     __"

label5.png は最初の2文字と8番目と9番目の文字に下線を引く.

irb(main):015:0> l.pattern = "_ " * (l.text.length + 1 / 2)
=> "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ "

もし単に下線付きアクセラレータ(ニーモニック)をラベル中で使いたければ,Gtk::Label#pattern=ではなくGtk::Label.newの第二引数にtrueを指定するかGtk::Label#use_underline=を使用するべきである.

テキストの自動折り返し

label6.png さらに,ラベルウィジェットにはテキストの行を自動的に折り返す機能もある. この機能を有効にするには次のメソッドを使用する.

Gtk::Label#set_wrap(wrap)
Gtk::Label#wrap=(wrap)

wrap引数にはtrue(折り返しする)またはfalse(折り返ししない)を指定する.

require 'gtk2'

l = Gtk::Label.new("Ruby-GNOME2 is a set of Ruby language bindings for \
the GNOME 2.0 development environment. This is the next generation of Ruby-GNOME.")
l.wrap = true

Gtk::Window.new.add(l).show_all

Gtk.main

スタイル(前景色/背景色/フォント)を指定する

前景色/フォントを変更する方法は2つある。ここではGTK+-2.xから導入されたPango Text Attribute Markup Languageを利用した方法を紹介する。

Pango Text Attribute Markup LanguageはHTMLライクに文字の属性を指定することができる。Gtk::Label#markup=(markup)は、通常の文字列の代わりにPango Text Attribute Markup Languageに従ったタグ付き文字列を渡してあげることで、簡単にラベル上の文字の属性を指定できる。

require 'gtk2'

label = Gtk::Label.new
label.markup = %Q[<u><span foreground="red" background="white" size="x-large" 
                  style="italic">Hello World!</span></u>]

window = Gtk::Window.new.add(label).show_all
Gtk.main

スタイル(前景色/背景色/フォント)を指定する(2)

ここでは、GTK+-1.2の頃と同様にGtk::Styleを使った例を紹介する。ただし、GTK+-2.xではフォントの指定にPango::FontDescriptionを使うことに注意して欲しい。

なお、基本的にはGtk::Labelに対してGtk::Widget#style=すれば良いが、背景色は直接Gtk::Labelに対して指定できない。なぜなら、Gtk::Labelは backgroundの色を保持する Gdk::Windowを持っていないので、Gtk::Widget#style=しても設定する対象が無いからである。

そのため、ここではGtk::Labelの親ウィジェットにGtk::EventBoxを使って、Gtk::EventBoxに対して色をつけるようにしている。

require 'gtk2'

style = Gtk::Style.new
style.font_desc = Pango::FontDescription.new("Serif 24")
style.set_fg(Gtk::STATE_NORMAL, 65535, 0, 0)
style.set_bg(Gtk::STATE_NORMAL, 65535, 65535, 0)

label = Gtk::Label.new("Hello World")
label.style = style
eventbox = Gtk::EventBox.new.add(label)
eventbox.style = style

Gtk::Window.new.add(eventbox).show_all
Gtk.main

Gtk::Style.newの代わりに、Gtk::Widget#styleを使って親ウィジェット(この場合はGtk::Window)からスタイルを取り出しても良い。

require 'gtk2'

window = Gtk::Window.new

style = window.style
style.font_desc = Pango::FontDescription.new("Serif 24")
style.set_fg(Gtk::STATE_NORMAL, 65535, 0, 0)
style.set_bg(Gtk::STATE_NORMAL, 65535, 65535, 0)

label = Gtk::Label.new("Hello World")
label.style = style
eventbox = Gtk::EventBox.new.add(label)
eventbox.style = style

window.add(eventbox).show_all
Gtk.main

*1Gtk::JUSTIFY_FILLがうまくいかない…

更新日時:2006/07/02 14:36:15
キーワード:
参照:[gtk2-tut-dialog] [gtk2-tut]