|
Tixいろいろ (2) 今度は次のウィジェットどもの紹介です。 「いろいろ」と雑多なもののような扱いをしていますが、 これらも面白くて役立つウィジェットであることは確かなんです。 ただ、機能が先述のグリッドやハイアラキカルリストのように多種多様多機能というわけではないので、 全部ごた混ぜで1ページに載せることができました。
●リストノートブック
package require Tix
wm title . "Curry Ordering"
image create photo ImageIcon -file yosyoku06.gif
set fa [frame .fa]
label $fa.la -image ImageIcon
label $fa.lb -text "お好みに合わせてお選びくだされ。"
foreach e {la lb} {pack $fa.$e -side left -padx 20}
set noa [tixListNoteBook .noa]
set ha [$noa subw hlist]
$ha add to -text トッピング
$ha add ryo -text 量
$ha add karasa -text 辛さ
foreach e {to ryo karasa} {set p($e) [$noa add $e]}
set fa $p(to)
label $fa.la -text "トッピング:"
listbox $fa.lsta -selectmode multiple
foreach e {チーズ ロースカツ チキンカツ チキン煮込み ほうれん草
卵 もつ シーフード 根菜} { $fa.lsta insert end $e }
foreach e {la lsta} { pack $fa.$e -side top -anc w -padx 20 }
set fa $p(ryo)
label $fa.la -text "ライスの量:"
scale $fa.scaa -from 200 -to 1300 -resolution 100 -variable ryo
set ryo 300
foreach e {la scaa} { pack $fa.$e -side top -anc w -padx 20 }
set fa $p(karasa)
label $fa.la -text "辛さ:"
set fb [frame $fa.fb -rel groove -bd 2]
set r 1; set c 1
foreach e {甘口 普通 中辛 激辛} {
radiobutton $fb.rad$e -text $e -anc w -variable karasa -value $e
grid $fb.rad$e -row $r -col $c
if {[incr r] == 4} {set r 1; incr c}
}
set karasa 普通
foreach e {la fb} { pack $fa.$e -side top -anc w -padx 20 }
button .cmde -text 注文 -command "order $p(to).lsta"
proc order lsta {
global ryo karasa
set a {}
foreach e [$lsta curselection] { lappend a [$lsta get $e] }
tk_messageBox -message "トッピング:$a\n量:$ryo\n辛さ:$karasa" \
-title Ordered
exit
}
pack .fa -side top -fill x
pack .noa -side top -fill x
pack .cmde -side right -padx 30
set noa [tixListNoteBook .noa]
set ha [$noa subw hlist]
$ha add to -text トッピング
$ha add ryo -text 量
$ha add karasa -text 辛さ
foreach e {to ryo karasa} {set p($e) [$noa add $e]}
なお、スクリーンショット左上の美味しそうなカレーのアイコンは、
うみもるサービスエリアで配布されているものを頂いてきたものです。
他にも腹が減ること請け合いの食べ物アイコンがたくさんあります。
●compound画像タイプ
package require Tix
wm title . "Choose Your Decoder"
label .la -text "デコーダを選んでください。"
# 複合画像型の中に入れる画像データ
image create photo ImageHard -file /usr/icons/win98/setuphard.gif
image create photo ImageSoft -file /usr/icons/win98/moviefile1.gif
# ボタンと、その上に表示する複合画像型を作ります。
button .cmda
image create compound ImageHardC -window .cmda
ImageHardC add image -image ImageHard
ImageHardC add line
ImageHardC add space -width 6
ImageHardC add text -text ハード -foreground #700040
.cmda configure -image ImageHardC
button .cmdb
image create compound ImageSoftC -window .cmdb
ImageSoftC add image -image ImageSoft
ImageSoftC add line
ImageSoftC add space -width 6
ImageSoftC add text -text ソフト -foreground #700040
.cmdb configure -image ImageSoftC
# バルーンを作ります。
tixBalloon .bal1 -initwait 300
.bal1 bind .cmda -msg "ハードウェアでアグレッシヴャにデコードを行います。"
tixBalloon .bal2 -initwait 300
.bal2 bind .cmdb -msg "ソフトウェアでロマンティックにデコードを行います。"
# ポップするウィンドウの背景色を変えます。
set bgcolor #f0c0c0
foreach c [winfo children .bal2] { $c configure -bg $bgcolor }
.bal2 subwidget label configure -bg $bgcolor
.bal2 subwidget message configure -bg $bgcolor
pack .la -side top
pack .cmda .cmdb -side left -padx 10 -pady 10 -ipadx 10 -expand yes
# end.
image create compound ImageHardC -window .cmda ImageHardC add image -image ImageHard ImageHardC add line ImageHardC add space -width 6 ImageHardC add text -text ハード -foreground #700040 .cmda configure -image ImageHardC
●バルーン
tixBalloon .bal1 -initwait 300 .bal1 bind .cmda -msg "ヘルプテキスト"なお、バルーンの背景色はちょっと鮮やか過ぎる山吹色、いわゆるピカチュウ色です。 他の色に変えるには、上のソースコードでやっているような処理を書けばOKです。
●ポップアップメニュー
package require Tix
package require pife
set w ""
wm title . "Image Viewer"
proc createWindow w {
pack [canvas $w.can -bg black] -expand yes -fill both
#### tixPopupMenu
# bindサブコマンドで結びつけたウィジェットが右クリックされると、
# 自動的にポップアップされます。
# 実際のメニュー操作はサブウィジェットであるmenuを取り出して
# 行います。
tixPopupMenu .pm -title "画像ビューアメニュー"
.pm bind $w.can
set menu [.pm subwidget menu]
$menu add command -label "開く..." -command "openImageFile $w"
$menu add separator
$menu add command -label "終了" -command exit
}
proc openImageFile {{w {}}} {
set can $w.can
set filename [tk_getOpenFile -initialdir .]
if {"$filename" == ""} {return}
catch {cd [file dirname $filename]}
image create photo Image1 -file $filename
$can delete all
$can configure -width [image width Image1]\
-height [image height Image1]
$can create image 0 0 -anc nw -image Image1
}
createWindow $w
# end.
ポップアップメニューはtixPopupMenuコマンドで作れます。 -titleでメニューの上部に表示したいタイトルが指定できます。 で、先述したようにそのbindコマンドでウィジェットを指定しておけば、 そのウィジェットが右クリックされると自動的にこのメニューがポップアップします。 実際にメニューに項目を追加するには、ポップアップメニューの subwidget menuサブコマンドでメニューにあたるサブウィジェットを取り出し、 これに対して通常のメニューと同様に項目を追加していけばOKです。
tixPopupMenu .pm -title "画像ビューアメニュー"
.pm bind $w.can
set menu [.pm subwidget menu]
$menu add command -label "開く..." -command "openImageFile $w"
$menu add separator
$menu add command -label "終了" -command exit
|