テケテケな日々(Ruby/tkメモの1)
Ruby/tk の公式なドキュメントがまだ不十分なので、ないよりはという程度にメモしてみる。「Ruby アプリケーションプログラミング」「Ruby を 256+ 倍使うための本 場外乱闘編」を参考にしているとはいえ、多分にわたしの推測やらがはいっているので、絶対的に正しいかどうかは不明です。
■基本
require 'tk'Tk.mainloop
Window を表示するだけ。クローズボタンで終了。
より丁寧には明示的に TkRoot.new するべきかもしれないが、なくても補完してくれているようなのでどうしてもというわけでもなさそう(「Ruby アプリケーションプログラミング」でもあえては書かれていない)。
■画像を表示する
○Text ウィジェットに表示する。
require 'tk't = TkText.new('width' => 30, 'height' => 20).pack
img = TkPhotoImage.new('file' => "image.gif")
TkTextImage.new(t, 'end', 'image' => img)
Tk.mainloop
TkText における width height は文字数で指定するので、ピクセル数と合わせるなら、
text-width = pixel-width / 8 ( 30 = 240/8 )text-height = pixel-height / 16 ( 20 = 320/16 )
にする。pack を忘れると表示されないので注意(基本のお約束)。
イメージを設定するには、TkBitmapImage もあるが、モノクロ画像のようなのでカラーイメージなら TkPhotoImage で。ファイル名を指定するしか方法がないようで、これが ImageMagick で生成したオブジェクトでもいけたら便利なのだけれど(知らないだけで方法はあるのかもしれないが)。パス指定もできると思うが、Windows の空白を含むパスだとうまくいかない例があるようなので、カレントディレクトリに画像ファイルを置いたほうが良さそう。
画像を表示する場所(TkText)と画像そのもの(TkPhotoImage)が準備できたら、TkTextImage で実際に表示させる。書式としては多分こんな感じ、
TkTextImage.new(表示させる場所, (よくわからない)'end', 'image' => 画像)
最後の Tk.mainloop はボタンなどの入力待ちループのお約束。これがないと瞬時に終了してしまう。
○Canvas ウィジェットに表示する。
require 'tk'canv = TkCanvas.new('width' => 240, 'height' => 320).pack
img = TkcPhotoImage.new('file' => 'image.gif')
TkcImage.new(canv, 120, 160, 'image' => img)
Tk.mainloop
キャンバスウィジェットにしてもほぼ同じ。TkCanvas.new の width height はピクセル数を指定。
TkcImage.new もほぼ同様で、
TkcImage.new(表示するキャンバス, 画像の中心 x 座標, 画像の中心 y 座標, 'image' => 画像)
といった感じ。
また TkcPhotoImage で標準で対応している画像ファイルの種類は極限定されたものだけなので、
require 'tkextlib/tkimg'
しておくほうが幸せになれる。使用するファイルの種類が決まっているなら、
require 'tkextlib/tkimg/png'
などと指定してもよい。
ぜひとも手元に置きたい。
![]() | Rubyアプリケーションプログラミング オーム社 2002-04 by G-Tools |
テケテケ、デケデケ。
![]() | 青春デンデケデケデケ (河出文庫―BUNGEI Collection) 河出書房新社 1992-10 by G-Tools |
| 固定リンク
コメント