/Tkで遊ぶ
友達と,メッセでTclのwishの話をしていて,そこでカラーダイアログが素敵だなぁって話になった.そのカラーダイアログの,16進で示された返り値を,なんとか楽しく使えないものかと.そこで,今回はごく試験的に,Tkモジュールを使ったお遊びプログラムを.
使い方は,ボタンを押すとカラーダイアログが表示されるので,とりあえず適当に色を選んでOKを押す.すると,ウィジェットのエントリに色の16進表記が表示されるってだけ.-cオプションで,初期の色(16進)を選べます.くれぐれも,初期の色に"(ダブルクォート)を忘れないでください.エラーこそ起きませんが,期待通りではない結果が返ってきます.具体的にはこんな感じ.
何に使えるか,と言われると困ります.まぁCSSを書く時,色を選ぶのに使ってみたらどうでしょうか.例えば,初期値を指定して,今よりちょっと暗くしたいんだよ,とか言うときに使える?
$ ./choosecl.rb -c #123456 #間違い
$ ./choosecl.rb -c "#123456" #正しい
以下,ソースです.
いやーGUIプログラミングって,奥が深い.本で読んだ事だけど,Tkはオブジェクト指向じゃないとか.オブジェクティブに行きたいなら,Gtkを使うのが良いらしい.わざわざ入れる気になりませんorz
#! /opt/local/bin/rubyrequire 'tk'
def usage
STDERR.print("usage: #{$0} [-c] ¥"[#color]¥" ¥n")
exit 1
endopt_initcl = false
while ARGV[0] =~ /^-/
$_ = ARGV.shift
opt_initcl = true if ~/c/usage if ~/[^-c]/
endopt_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
今回学んだのは,ボタンを押して動的に結果を変えたいならTkEntryを使うが吉.