1

(この質問はもともとpython-tkinter メーリング リストに投稿されたものです)

Tkinter を使用して、Windows .NET アプリケーションからノンブロッキング (またはモードレス) ウィンドウの動作を複製しようとしています。

私が持っているアプリケーションは、何らかのイベント (非 GUI イベントである可能性があります) に応答して新しいウィンドウを表示し、新しいウィンドウを表示したまま実行を続けます。

関連するコードは次のとおりです。

private void foo(object sender, EventArgs e)
{
   Form1 f = new Form1();
   f.Show(); // displays a window and continues
   Console.WriteLine("Form created");
}

重要な部分は、.NET クラスのShow() メソッドの呼び出しSystem.Windows.Forms.Form/Controlです。

このfoo()関数は、何らかのシグナルへの応答として非 GUI アプリケーションから呼び出されたり、C++ アプリケーションから呼び出されたりする場合もあります。

ポイントは、イベントを明示的に待機する必要がなく、ウィンドウがモードレスであることです。

Tkinterで同様の動作を実現するにはどうすればよいですか? mainloop()またはメソッドの呼び出しを回避する Tkinter の慣用的な方法はありますかwait_window()(どちらもブロックされています)。

4

1 に答える 1

1

のインスタンスを作成することにより、非モーダル ポップアップ ウィンドウを作成できますToplevel(既にルート ウィンドウを作成していると仮定します)。ただし、イベント ループを実行する必要があります。これは、tkinter がウィンドウをいつ再描画する必要があるかを知るために使用するメカニズムであるためです。

于 2013-10-14T14:10:11.867 に答える