tkinter顶层:试图了解一个关闭窗口的怪癖

时间:2018-09-08 20:15:52

标签: python tkinter window destroy toplevel

我创建了一个简单的Python / tkinter应用程序。它使用Tk()打开一个主窗口,并使用Toplevel打开一个辅助窗口。

我注意到异常行为:如果在第一次单击主窗口之前尝试关闭第二个窗口,它将关闭两个窗口(这不是所需的行为)。但是,如果我先单击主窗口,然后关闭辅助窗口,则主窗口保持打开状态。

所需的行为是这样的:我希望能够在保持主窗口打开的同时关闭辅助窗口。而且我不想首先单击主窗口以使其保持打开状态。您应该能够直接转到次要窗口并关闭它,而不会同时关闭主要窗口。

为了防止不必要地关闭主窗口,我在代码中创建了一个hack:我使用lift()来回交换堆栈顺序。这将产生所需的行为:我可以立即关闭辅助窗口,而无需先单击主窗口,并且主窗口仍保持打开状态。这是我写的代码:

    Object res = doitMethod.invoke(null, new Object[0]);

如果没有这种技巧,是否有办法达到相同的效果?我试图理解为什么我需要在代码中加入这个hack。

人们编写启动辅助窗口的代码时,通常是从主窗口启动它的上下文中。这迫使用户首先单击主窗口。但是由于我同时启动两个窗口,因此不能保证用户会首先单击主窗口。所以也许这就是为什么我需要引入lift()黑客的原因。

不要大惊小怪,但是我正在寻找一种简单的平面代码解决方案,而不是面向类的解决方案。因此,希望可以实现不涉及关键字class,self,super(),init,main,带有双下划线的任何内容的解决方案等。我在想我写的内容可能有一个小的修正或小的补充。但是我不知道那会是什么。

我正在使用Windows,所以不确定是否适用于Mac或Linux。

0 个答案:

没有答案