3

a question following the one asked in How to make a Tkinter window jump to the front?

I'd like to have a toplevel window (which I use to navigate my other main window) always on the front. BUT I'd like it to be on the front only relative to all the various windows of my tkinter program.

The chwin.wm_attributes("-topmost",True) solution, instead, forces this window on top of every window in my desktop (at least here: Linux fedora13).

Do you know of any other solution?

4

2 回答 2

3

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

Linux 故障?我不知道

我终于找到了一种方法:只需从必须保持在顶部的窗口中调用 wm_transient :

secondarywindow.wm_transient(root)

这样,secondarywindow总是在root之上,但它可能会被我在桌面上使用的任何其他程序所掩盖

于 2013-11-07T13:08:51.280 回答
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()

请注意您想要的窗口如何始终保持焦点(在顶部),而不管创建了多少顶层。尽管如此,它不会超越其他应用程序(仅由脚本创建的窗口)。

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

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

于 2013-07-27T15:09:09.647 回答