ruby-****@lists*****
ruby-****@lists*****
2003年 5月 26日 (月) 21:34:31 JST
------------------------- REMOTE_ADDR = 210.249.193.205 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/?%A5%E9%A5%D9%A5%EB ------------------------- ------------------------- = Gtk::Label ((*部分的には直しましたけど、まだRuby/GTK向けのものです。*)) == 基本的な使い方 require 'gtk2' Gtk.init label = Gtk::Label.new("Hello World") window = Gtk::Window.new window.add(label) window.show_all Gtk.main == テキストを後から設定する Gtk::Label.new時ではなく、生成後にGtk::Labelに文字列を指定することもできます(当たり前か(^^;))。 require 'gtk2' Gtk.init label = Gtk::Label.new("Hello") text = label.text label.set_text(text + " World") window = Gtk::Window.new window.add(label) window.show_all Gtk.main --- Gtk::Label#text 現在Gtk::Labelに指定されている文字列を取得します。 --- Gtk::Label#set_text(text) textにテキストを指定します。 == スタイル(前景色/背景色/フォント)を指定する 前景色/フォントを変更するにはGtk::Labelに対してGtk::Widget#set_style()すれば良いのですが、背景色は直接Gtk::Labelに対して指定できません。そのため、ここではGtk::Labelの親ウィジェットにGtk::EventBoxを使って、Gtk::EventBoxに対して色をつけます。 require 'gtk2' Gtk.init style = Gtk::Style.new style.set_font(Gdk::Font.fontset_load("-adobe-helvetica-bold-r-normal--24-*")) style.set_fg(Gtk::STATE_NORMAL, 0, 65535, 0) style.set_bg(Gtk::STATE_NORMAL, 65535, 0, 0) label = Gtk::Label.new("Hello World") label.set_style(style) eventbox = Gtk::EventBox.new eventbox.set_style(style) eventbox.add(label) window = Gtk::Window.new window.add(eventbox) window.show_all Gtk.main Gtk::Labelは backgroundの色を保持する Gdk::Windowを持っていないので、Gtk::Widget#set_style()しても色が見えないというわけです。 == スタイル(前景色/背景色/フォント)を指定する2 2では独自にstyleを生成(Gtk::Style.new())しましたが、以下のようにGtk::Widget#get_style()を用いて既存のウィジェットからスタイルを取り出してそれを変更するということもできます。 なんとなくこっちの方が確実な感じがするのですが、いかがでしょう? require 'gtk2' Gtk.init window = Gtk::Window.new style = window.get_style style.set_fg(Gtk::STATE_NORMAL, 0, 65535, 0) label = Gtk::Label.new("Hello World") label.set_style(style) window.add(label) window.show_all Gtk.main ※ 日本語の場合、Gtk::Style#set_font(font)を使ってフォントの指定をしないと文字化けするようです。なんでだろ。もうちょっと調べますか...。 == 2行以上の表示と右寄せ/左寄せ/中央寄せ 2行以上表示する場合は単に指定文字列に\nを入れればOKです。ここでは、Gtk::Label#set_justify()を使って右寄せにしています。 require 'gtk2' label = Gtk::Label.new("first line\nsecond line\nhoge fuga uge ugyo") label.set_justify(Gtk::JUSTIFY_RIGHT) window = Gtk::Window.new window.add(label) window.show_all Gtk.main --- Gtk::Label#set_justify(type) * Gtk::JUSTIFY_LEFT - 左寄せ * Gtk::JUSTIFY_RIGHT - 右寄せ * Gtk::JUSTIFY_CENTER - 中央寄せ(デフォルト) * Gtk::JUSTIFY_FILL - ?(イメージ的には単語毎かなんかにスペースを入れてくれそうなんだけど....) Gtk::Label#set_justify()はLabel自体、2行以上指定しないと意味がないみたいです。Labelの幅より小さい文字列を指定した場合は1行でも調節されると思っていたんですが...。 == 行末で折り返す Gtk::LabelにはテキストがGtk::Label自体の幅より大きくなってしまった場合に、単語毎に自動的に改行してくれるLine(Word) wrap機能があります。 require 'gtk2' Gtk.init label = Gtk::Label.new("hoge fuga uge ugyo hoge fuga uge ugyo hoge fuga uge") label.set_line_wrap(true) window = Gtk::Window.new window.add(label) window.show_all Gtk.main --- Gtk::Label#set_line_wrap(line_wrap) * line_wrap - Line wrapする場合はtrue、しない場合はfalseを設定します。 == アンダーラインを引く Gtk::Label#set_pattern()をするとアンダーラインを指定することができます。 require 'gtk2' label = Gtk::Label.new("hoge fuga\nuge") #label.set_line_wrap(true) label.set_pattern("____ ____ ___") window = Gtk::Window.new window.add(label) window.show_all Gtk.main なんか、Gtk::Label#set_line_wrap(true)と一緒には使えないみたいです。上記例でlabel.set_line_wrap(true)のコメントを外すとアンダーラインが表示されなくなります。 == メニューバーで使うようにアンダーラインを引く Gtk::ItemFactoryのアクセラレータキーの指定方法と同様の方法でアンダーラインを引くこともできます。ただし、この方法はGTK+の内部で使われることを意図して作られたメソッドですので、使うことはほとんどないでしょう。 require 'gtk2' label = Gtk::Label.new("") p label.parse_uline("_Files") window = Gtk::Window.new window.add(label) window.show_all Gtk.main Gtk::Label#parse_uline(text)の戻り値はアンダースコアの次の1字を小文字にした場合のキー値になります。例えば、上記例(_Files)ではfのキー値です。