让Tkinter跳到前面 - 但只相对于Tkinter程序

时间:2013-07-01 13:00:43

标签: tkinter

How to make a Tkinter window jump to the front?

中提出的问题之后的问题

我想在前面有一个顶层窗口(我用它来导航我的另一个主窗口)。 但是我希望它只在我的tkinter程序的各个窗口的前面。

chwin.wm_attributes("-topmost",True)解决方案强制将此窗口置于桌面上的每个窗口之上(至少在这里:Linux fedora13)。

你知道其他任何解决方案吗?

2 个答案:

答案 0 :(得分:3)

最后,lift()方法调用效果不佳。当我使用它并覆盖窗口时我希望保持在顶部,此调用只是让窗口的图标在任务栏中突出显示(当您在非可见窗口中执行某些操作时会发生这种情况),但是窗口没有解除。

Linux故障?我不知道

我终于找到了一种方法:只需从必须保持最佳状态的窗口调用wm_transient:

secondarywindow.wm_transient(root)

这样, secondarywindow 始终位于 root 之上,但它可以被我在桌面上使用的任何其他程序遮挡

答案 1 :(得分:1)

每次创建新窗口后,您都可以抬起所需的窗口:

import Tkinter as tk
root = tk.Tk()
tk.Label(root, text="I'm the root").grid()
main = tk.Toplevel(root)
tk.Label(main, text="I'm the one you want").grid()
def bring_to_front():
    """This function was made to demonstrate"""
    tk.Toplevel(root)
    # Each time a new window is created, lift the one you want above it.
    main.lift()
    root.after(5000, bring_to_front)
root.after(1, bring_to_front)
root.mainloop()

注意无论制作多少Toplevels,您想要的窗口始终保持焦点(位于顶部)。然而,它不会提升到其他应用程序之上(只有脚本生成的窗口)。

您甚至可以使用iconify Toplevel方法来最小化您现在不需要的每个窗口。

请注意,我在Python 2.7中使用它。如果您没有/使用Python,只需将此脚本中给出的原则应用于其他地方。