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.newwindow.realizepix, 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 pmvbox.pack_start labelbutton.add vbox