让Tkinter跳到前台 - 但仅相对于Tkinter程序

3

如何使Tkinter窗口跳到前面的问题之后,有一个问题需要解答。

我想要一个toplevel窗口(我用它来浏览我的主窗口)总是保持在最前面,但是我只希望相对于我的tkinter程序的各种窗口而言最前面。

chwin.wm_attributes("-topmost",True)方法强制将该窗口置于桌面上每个窗口的顶部(至少在这里:Linux fedora13)。

你知道其他的解决方法吗?

2个回答

4

在使用lift()方法时出现了问题。当我使用它并覆盖住想要保持在最前面的窗口时,这个调用只会让窗口的图标在任务栏中被突出显示(就像在非可见窗口中有某些动作时发生的情况),但窗口并没有被提升到最前面。

是Linux的故障吗?我不知道。

我最终发现了一种方法来实现:只需从需要始终在最前面的窗口中调用wm_transient:

secondarywindow.wm_transient(root)

这样,secondarywindow 总是在 root 的上面,但它可能会被我在桌面上使用的其他程序遮挡。

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()

请注意,无论有多少Toplevel被创建,您想要的窗口始终保持焦点(在顶部)。 但是,它不会在其他应用程序之上提升(仅在脚本创建的窗口之上)。
甚至可以使用Toplevel的iconify方法将您现在不想置顶的所有窗口最小化。
请注意,我是在Python 2.7中编写的。 如果您没有/使用Python,则可以在其他地方应用此脚本中提供的原则。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接