/Tkで遊ぶ

友達と,メッセでTclのwishの話をしていて,そこでカラーダイアログが素敵だなぁって話になった.そのカラーダイアログの,16進で示された返り値を,なんとか楽しく使えないものかと.そこで,今回はごく試験的に,Tkモジュールを使ったお遊びプログラムを.


使い方は,ボタンを押すとカラーダイアログが表示されるので,とりあえず適当に色を選んでOKを押す.すると,ウィジェットのエントリに色の16進表記が表示されるってだけ.-cオプションで,初期の色(16進)を選べます.くれぐれも,初期の色に"(ダブルクォート)を忘れないでください.エラーこそ起きませんが,期待通りではない結果が返ってきます.具体的にはこんな感じ.


$ ./choosecl.rb -c #123456 #間違い
$ ./choosecl.rb -c "#123456" #正しい
何に使えるか,と言われると困ります.まぁCSSを書く時,色を選ぶのに使ってみたらどうでしょうか.例えば,初期値を指定して,今よりちょっと暗くしたいんだよ,とか言うときに使える?


以下,ソースです.


#! /opt/local/bin/ruby

require 'tk'

def usage
STDERR.print("usage: #{$0} [-c] ¥"[#color]¥" ¥n")
exit 1
end

opt_initcl = false

while ARGV[0] =~ /^-/
$_ = ARGV.shift
opt_initcl = true if ~/c/

usage if ~/[^-c]/
end

opt_initcl = false if ARGV.size < 1
opt_initcl = false if ARGV[0] !~ /^#[0-9a-f]{6}/

e = TkEntry.new.pack

e.value = opt_initcl ? ARGV[0] : "#ffffff"

TkButton.new{
text "choose color"
command { cl = chooseColor('initialcolor' => e.value)
e.value = cl}
pack
}

Tk.mainloop

いやーGUIプログラミングって,奥が深い.本で読んだ事だけど,Tkはオブジェクト指向じゃないとか.オブジェクティブに行きたいなら,Gtkを使うのが良いらしい.わざわざ入れる気になりませんorz

今回学んだのは,ボタンを押して動的に結果を変えたいならTkEntryを使うが吉.