如何摆脱Python Tkinter根窗口?

Jon*_*röm 55 python winapi tk-toolkit tkinter

你知道一种聪明的方式来隐藏或以任何其他方式摆脱出现的根窗口Tk()吗?我想只使用一个普通的对话框.

我应该跳过对话框并将所有组件放在根窗口中吗?是可能的还是可取的?还是有更聪明的解决方案?

Bry*_*ley 76

可能绝大多数基于tk的应用程序将所有组件放在默认的根窗口中.这是最方便的方法,因为它已经存在.选择隐藏默认窗口并创建自己的窗口是一件非常好的事情,尽管它只需要一点额外的工作.

要回答有关如何隐藏它的特定问题,请使用根窗口的withdraw方法:

import Tkinter as tk
root = tk.Tk()
root.withdraw()
Run Code Online (Sandbox Code Playgroud)

如果要再次显示窗口,请调用deiconify(或wm_deiconify)方法.

root.deiconify()
Run Code Online (Sandbox Code Playgroud)

一旦你与对话完成后,你可以沿着与其他所有的Tkinter部件销毁根窗口破坏方法:

root.destroy()
Run Code Online (Sandbox Code Playgroud)

  • @deusexmachina:如果您正确使用它们,它们都可以工作,但它们都有不同的用途。虽然`.quit()` 和`.destroy()` 实际上是相同的。 (2认同)
  • @deusexmachina:所有这些方法都做不同的事情。在`destroy()` 的情况下,你可以在任何小部件上使用它。当你在根窗口调用它时,它的行为就像`.quit()`,即使这样也有区别。只是大多数应用程序永远不会利用差异。 (2认同)

Car*_*ada 13

我没有测试过,因为我没有任何Python/TKinter环境,但试试这个.

在纯Tk中,有一种称为"wm"的方法来管理窗口.在那里你可以做一些像"wm withdraw .mywindow"这样的地方,其中'.mywindow'是一个顶级的.

在TkInter中你应该能够做类似的事情:

root = Tkinter.Tk()
root.withdraw() # won't need this
Run Code Online (Sandbox Code Playgroud)

如果要再次显示窗口,请调用deiconify(或wm_deiconify)方法.

root.deiconify()
Run Code Online (Sandbox Code Playgroud)

  • @IcyFlame:您执行root.deiconify()以使窗口重新出现。 (2认同)

qed*_*qed 8

在OSX上,iconify似乎更好用:

root = Tkinter.Tk()
root.iconify()
Run Code Online (Sandbox Code Playgroud)


Buv*_*inJ 7

如果您不希望创建窗口时出现“闪烁”,请使用以下细微的变化:

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
Run Code Online (Sandbox Code Playgroud)