Tkinter相当于.NET中的非阻塞System.Windows.Forms.Form.Show()

时间:2013-10-14 10:05:14

标签: python .net user-interface tkinter

(这个问题是originally posted到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类System.Windows.Forms.Form/Control的{​​{3}}。

可以从非GUI应用程序调用{​​{1}}函数,作为对某些信号的响应,甚至可以从C ++应用程序调用。

重点是没有明确的等待事件,窗口是无模式的。

如何在Tkinter中实现类似的行为? 是否有任何Tkinter惯用方法可以避免调用foo()mainloop()方法(两者都阻止)?

1 个答案:

答案 0 :(得分:1)

您可以通过创建Toplevel的实例来创建非模态弹出窗口(假设您已经创建了根窗口)。但是,您需要运行事件循环,因为这是tkinter用于了解窗口何时需要重新绘制的机制。