1

私は tcl/tk の初心者であり、ケイデンスの遭遇でスクリプトを実行する必要があります。そのために、提供されたインタープリターでファイルをソースし、関数を呼び出します。最初の実行では、正常に動作します。wmただし、Tk で作成したメイン ウィンドウを閉じて、メソッドを再実行しようとすると、アプリケーションが破棄されているため、コマンドを呼び出せないことがわかります。Tcl インタープリターを再起動せずにスクリプトを再実行するにはどうすればよいですか?

4

2 に答える 2

4

メインウィンドウを閉じることが問題です.Tkを回復不可能な状態にし、終了することしかできません.

WM_DELETE メッセージにバインドして、メイン ウィンドウ '.' を非表示/アイコン化してみてください。または、デフォルトの「.」の代わりに追加のトップレベル ウィンドウを使用します。窓。

スクリプトによっては、2 回実行したときに一部のウィジェット/名前が既に存在する可能性があるため、さらにいくつかのことを行う必要がある場合があります。

于 2012-05-21T09:58:47.620 に答える
1

私は以前、デバッグメニューに表示されるこのようなものを使用していました:(警告はテストされていません!)

proc Restart {} {
   foreach w [winfo children .] {
       destroy $w
   }
   source [info script]
}

これは(うまくいけば)すべての子ウィジェットを破棄し、スクリプトをリソースとして再作成します。これは、現在のスクリプトが実行していることを前提としています。

しかし、これは、schlenkが示唆しているように、最初にウィンドウをどのように構築しているかによって異なります。

于 2012-05-21T10:28:22.923 に答える