1

私はこのようなコードを持っています

  proc press2 {v sbit} {
                puts $v
                puts $sbit
        }

                   :
                   :
button .t.ok2 -text "OKI" -command "press2 $v $sbit"

これを I getにwrong # args: should be "press2 v sbit" 変更すると エラーが発生し、最後に試してみましたが、エラーは発生しませんが、機能しません。TCL/TK に関する適切なドキュメントはありますか? 通常のマニュアルページとグーグルはあまり役に立ちません。試行錯誤しながらいろいろやってます。button .t.ok2 -text "OKI" -command {press2 $v $sbit}can't read "v": no such variablebutton .t.ok2 -text "OKI" -command [press2 $v $sbit]

4

1 に答える 1

5

プロシージャに複数の引数を渡すのは簡単ですが、「正しい」方法は、必要なものによって異なります。

  • Early Binding : 現在の値を後で渡したい場合 (たとえば、ループでウィジェットを作成する場合)、次を使用する必要がありますlist

    button .t.ok2 -text OKI -command [list press2 $v $sbit]
    

    listこれ以上置換されないコマンドを作成します*。

  • Late Binding : このコマンドの実行時に値を渡したい場合は、単純に括弧で囲みます。{}

    button .t.ok2 -text OKI -command {press2 $v $sbit}
    

    ボタンが押されると、変数vとが代入されます。sbitグローバル変数 (または名前空間内の変数で、ローカル変数にはアクセスできません) にのみアクセスできます。

* Tk'sは、次の文字を特別なものにbind置き換えます。%これは、Tcl 置換ではなく文字列置換を使用して行われるため、これlistを防ぐことはできません。

于 2013-09-16T08:54:00.587 に答える