Gtk で画像を扱うには、まず Gdk::Pixmap のオブジェクトを作ります。 やり方は何種類かありますが、ここでは XPM 形式の外部ファイルから作る方法を説明します。
例: pix, mask = Gdk::Pixmap.create_from_xpm(window, transparent_color, 'filename')filenameで示される XPM 形式ファイルから、 pixmap 形式の画像とマスク用のビットマップを生成します。 第1引数の window は Gdk::Window オブジェクトです。 第2引数の transparent_colorは普通 nil で構いません。
Gdk::Pixmap オブジェクトを作ったら、 Gtk::Pixmap ウィジェットとして表示できるようになります。
pm = Gtk::Pixmap.new(pix, mask)
Gtk::Button ウィジェットはコンテナウィジェットの一種で、 任意の子ウィジェットを含むことができます。 例えば pixmap とラベルウィジェットを含むボタンを作るには 次のようになります。
プログラム pixmap.rb:
require 'gtk' window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL) button = Gtk::Button.new window.realize pix, mask = Gdk::Pixmap.create_from_xpm(window.window, nil, 'test.xpm') pm = Gtk::Pixmap.new(pix, mask) label = Gtk::Label.new('pixmap button') vbox = Gtk::VBox.new(false, 0) vbox.pack_start pm vbox.pack_start label pm.show label.show vbox.show button.add vbox window.add button button.show window.show Gtk.main
(注: XPM ファイルは別途用意する必要があります。 ここでは ruby/gtk 付属の test.xpm というファイルを用いるものとします。)
実行結果
プログラムの説明
window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
button = Gtk::Button.new
window.realize
pix, mask = Gdk::Pixmap.create_from_xpm(window.window, nil, 'test.xpm')
pm = Gtk::Pixmap.new(pix, mask)
label = Gtk::Label.new('pixmap button')
vbox = Gtk::VBox.new(false, 0)
vbox.pack_start pm
vbox.pack_start label
button.add vbox