これにはまだ慣れていないので、解決できない興味深い問題を自分で作成しました...
ユーザーが既存の文字列を編集できる独自の「ポップアップ」ボックスを設計しようとしています。ボタンを押すとポップアップし、入力ボックスに文字列が表示されます。ユーザーが文字列を編集したら (または編集しなくても)、[OK] ボタンをクリックすると、ボタンが消え、スクリプトに新しい文字列が追加されます。
私のアプローチは次のようなものです:
ボタンを押すと、3 つのウィジェットを含むトップレベル ウィンドウが作成されます。
- 単純なラベル「文字列を編集します。完了したら [OK] を押してください」;
- 定義済みの文字列を含む編集可能なエントリ。
- 押されたときにトップレベルウィンドウを破棄するボタン「OK」。
私はそれを機能させましたが、編集された文字列を取得する方法がわかりません。
私の根本的な問題は、「イベント駆動型」の用語で考えていないことだと認識しています。これは簡単に実行できるはずですが、この時点では森が見えません。
私は何が欠けていますか?私はこれを複雑にしすぎていますか?
#!/usr/bin/wish
# Create the Pop-up box
proc popUpEntry { labelString } {
global myString
puts "POP:myString = $myString"
set top [toplevel .top]
set labelPop [label $top.labelPop -text $labelString ]
set entryPop [entry $top.entryPop -bg white -width 20 -textvar $myString ]
set buttonPop [button $top.buttonPop -text "Ok" -command { destroy .top } ]
pack $labelPop
pack $entryPop
pack $buttonPop
}
# Pop-up command
proc DoPop {} {
global myString
set popUpLabel "Edit string, press ok when done:"
puts "Before: myString = $myString"
popUpEntry $popUpLabel
puts "After: myString = $myString"
}
# Initalize
set myString "String at start"
# Pop-up button invokes the pop-up command
set buttonPop [button .buttonPop -width 10 -text "Pop" -command {DoPop} ]
pack $buttonPop
#