1

TCL/Tk アプリには次のものがあります。

 proc greyout { } {
     puts "current part $DSM::Part"
     switch $DSM::Part {
 Doghouse {
     for {set entry 1} {$entry<17} {incr entry} { 
         .dsm.traceCTRpart$entry  configure -state disabled
         .dsm.traceLATpart$entry  configure -state disabled
         .dsm.traceStowage$entry  configure -state disabled      
         .dsm.traceDoghouse$entry configure -state enabled}
        }
  Stowage {
     for {set entry 1} {$entry<17} {incr entry} { 
         .dsm.traceCTRpart$entry configure -state disabled
         .dsm.traceLATpart$entry configure -state disabled
         .dsm.traceStowage$entry configure -state enabled        
         .dsm.traceDoghouse$entry configure -state disabled}
        }   
     }   
 }

  trace add variable DSM::Part write greyout

「パーツ」が変更されるたびに、トレースはグレーアウトを呼び出そうとしますが、次のメッセージが表示されます。

 wrong # args: should be "greyout"
 wrong # args: should be "greyout"
 while executing
"greyout Part {} write"
(write trace on "Part")
invoked from within
"variable Part "CTR_Partition""
(in namespace eval "::DSM" script line 3)
invoked from within.....

なぜだかわからない!? そこに助けはありますか?

4

1 に答える 1

2

問題は、トレース コールバックが起動されると、コールバックの起動をトリガーした原因に関する情報を提供するために使用される追加の引数がコールバックに追加されることです。コードは 1 つの変数にのみトレースを置いているため、これらの引数は現時点ではあまり役に立ちませんが、より複雑な状況では大いに役立ちます。

これを処理するためにコードを適応させる最も簡単な方法は、特別な仮引数greyoutを使用して、任意の数の引数を取るようにすることです。args

proc greyout {args} {
    puts "current part $DSM::Part"
    ...
}
于 2013-05-08T13:34:29.603 に答える