0

tcl tk に .dsm という名前のメイン ウィンドウがあります。このメイン ウィンドウには、2 つのノートブック タブ f1 と f2 があります。ユーザーが 2 番目のタブの「実行」ボタンをクリックすると、最初のタブがアクティブになり、続行する前に入力を確認するようユーザーに求めます。私の問題は、ユーザーに入力を確認するように求めるメッセージ ボックスが表示されると、.dsm ウィンドウが最小化されることです。ユーザーがメッセージボックスとメインウィンドウの両方を見ることができるように、これを防ぐにはどうすればよいですか? 「レイズ」を試みたのですが、メッセージボックスが見えなくなってしまいました...

# activate the first notebook tab "f1"
.dsm.nb select .dsm.nb.f1
# Ask the user
set answer [tk_messageBox \
        -message "Are these the setting you want to use for the batch run?" \
        -type okcancel]
4

1 に答える 1

1

あなたが説明する動作は、デフォルト構成の Tk の機能ではありません。どのプラットフォームで標準ダイアログを使用しても、他のウィンドウは最小化されません。、 、などのイベントを追跡して悪用するスクリプトを作成することは可能かもしれませんが、見苦しく、移植性がありません。そしてユーザーインターフェースのデザインが悪い。(誰かがこれをやろうと考えているなら、やらないでください<Focus><Leave><Deactivate>

を指定することで問題を解決できる場合があります。-parent消えたくないウィンドウにするオプション(メッセージボックスをそのメインウィンドウのヘルパーウィンドウとしてマークします)ですが、視覚効果も持つことができます。そうしないと、おそらく、どのイベント ハンドラーがメッセージ ボックスで取得し、予期しない方法で応答しているかを突き止めなければならないでしょう。これは、ウィジェット クラスのハンドラーのいずれであってはなりません — 彼らはこのようなことをしません — しかし、かなり大規模な検索が必要になるかもしれません。特に注意する必要があるのは、いくつかのイベント ハンドラーが異なるバインド タグ レベルで定義されている複数のイベント ハンドラー間の相互作用です。(おそらく、widget および含むトップレベル以外のレベルで動作を定義したくないでしょう。真に一般的なコントローラー スクリプトを記述することは非常に困難ですが、特定のウィジェットまたはウィンドウに対して適切に機能させることははるかに簡単です。)

于 2013-10-15T12:56:48.373 に答える