むとうです。

yashiさん wrote: 
> > Ruby/GTK 0.23で、Widgetのスタイル(前景色/背景色)を指定したいのですが
> > うまく指定できません。
> 
> # 他の MLの話とかって出したらまずいのかな‥。
> 
> # hypercore さんの所の gtk mlで 岡@奈良先端大さんが答えてるんですよね、
> # そのままの質問について‥。興味があったらそっちの ml の archiveを見てく
> # ださいな。
> 
> 簡単に説明すると、GtkLabelは backgroundの色を保持する GdkWindowを持って
> いないので、Gtk::Widget#set_styleしても色が見えません。
> で、[ruby-ext:01163]の script なら、label.set_style ではなく
> window.set_styleする事によって、色が見えます。
> 上で書いた岡@奈良先端大さんの mail だと labelの親に event boxを使ってま
> す。理由として、GdkWindowを保持する widgetの中では比較的計量だからだそう
> です。

ありがとうございます。無事解決できました。
上記MLも大変参考になりました。

---
require 'gtk'

style = Gtk::Style.new
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)
event_box = Gtk::EventBox.new
event_box.set_style(style)
event_box.add(label)
window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
window.add(event_box)
window.show_all
Gtk.main
--

Labelの前景色と背景色を設定するのにlabelとevent_boxの両方にstyle指定しないと
ダメみたいですが、ちょっと面倒くさい気もしますね...。

------------------------
ところで....。

今回は上記例で解決できますので良いのですが、あいかわらず、
http://ruby.freak.ne.jp/gtk/style.html
のサンプルが同ページの実行結果のようにならないのがちょっと気になります。


サンプルをそのまま転載させて頂きます。

---
require 'gtk'

window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)

style = Gtk::Style.new
style.set_font Gdk::Font.fontset_load '-adobe-helvetica-bold-r-normal--18-*'
style.set_fg(Gtk::STATE_NORMAL, 10000, 50000, 60000)
style.set_bg(Gtk::STATE_NORMAL, 65535, 50000, 50000)

Gtk::Widget.push_style style
button = Gtk::Button.new('Hello World')
Gtk::Widget.pop_style

window.add button
button.show
window.show
Gtk.main
---

ここで、 push_style, pop_styleの間に生成したウィジェット(つまりbutton)
は、styleに指定したスタイルになるとのことですが....。

念のため、windowの生成自体をpush_style, pop_styleの間にいれてみたのですが
やっぱりだめです。
#button.set_style(style)と記述するとスタイルが変更されるのですが...。

これは、私の環境固有の問題なのでしょうか?

----
○● むとう まさお(MUTOH Masao)
●○ E-Mail:mutoh / highway.ne.jp