2016-10-13 34 views
1

Tkなしで使用されたスクリプトがあります。私がTkを追加すると、1行はウィンドウへのパスとして扱われ、私はその理由を理解しません。Tcl/Tk:ウィンドウパスでないときの "bad window path name"

エラーインフォアは次のようである: bad window path name "* Log directory: D:/tests/log/2016_10_13_17_30_29"

この行が実行されるときには、次のとおりです。

message "* Log directory: ${dirname}" 

dirnameは、例えば、ディレクトリへのパスとして解決されます。

D:/tests/log/2016_10_13_17_30_29 

messageですファイルへのロギングの簡単な手順:

proc message {text} { 
    global test_log_filename 
    puts -nonewline $test_log_filename "[timestamp]   " 
    puts $test_log_filename $text 
} 

Tkを使用していないときは正しく動作しています。私が理解しているように、Tkウィンドウへのパスとしてmessageプロシージャ引数が必要ですが、その理由はわかりません。もちろん、そのようなウィンドウは存在しません。

また、私はmessage testのようなものを呼び出して、引数の問題であることを確認しようとしました。それはエラーを与えるbad window path name "test"

あなたはそれを助けてくれますか?

答えて

2

Tkのコマンドはmessageと呼ばれる定義(それはlabelに似たウィジェットですが、多少異なるワード・ラップ・アルゴリズムと、それは新しいコードにはお勧めできませんです)といくつかの理由のために、それが出て勝っています。 のコードを直接package require Tkの後ろに置くことによって、おそらくあなたのコードを使用することができますが、それが原因で他のコード区切りが見つかるかもしれません。 (標準ダイアログで現在使用されているのかどうかは分かりませんが、それは間違っているかもしれません)

最も簡単なことは、ログ処理の名前を変更することです。おそらくMessage(大文字付き)になります。それは事実上全世界的な検索と置き換えではないので、それは長くかかりません。

+0

ありがとうございました!愚かな私...私はそれを確認する必要があります... – bLAZ

関連する問題