Tkinter Toplevel总是在前面

时间:2017-07-20 12:25:48

标签: python tkinter

我正在开发一个程序,该程序使用tkinter TopLevel窗口定期向用户显示更新日志信息。我的问题是主程序是全屏的,所以每当他们打开日志窗口后与它进行交互时,日志窗口就不可见,因为它现在位于主程序之后。

有没有办法强制Toplevel窗口(或实际上,任何Tkinter窗口)永久保持在所有其他窗口的上面?

考虑这个快速设置,例如:

import tkinter as tk
from tkinter import ttk

class Example(tk.Frame):

    def __init__(self, master, *args, **kwargs):
        tk.Frame.__init__(self, master, *args, **kwargs)
        self.pack()
        btn = ttk.Button(self, text = "Press", command = self.openTopLevel)
        btn.pack()

    def openTopLevel(self):
        topLevelWindow = tk.Toplevel(self)

root = tk.Tk()
main = Example(root)
root.mainloop()

当您按下按钮并打开Toplevel窗口时,它位于顶部。但是如果你抓住框架,移动它等等,Toplevel会支持它。我怎么阻止它?或者这不是Tkinter允许我做的事情吗?

1 个答案:

答案 0 :(得分:7)

要在tkinter应用程序中使窗口停留在其他窗口前,请使用
attributes('-topmost', 'true')。在您的代码中,它是一行添加。

import tkinter as tk
from tkinter import ttk

class Example(tk.Frame):

    def __init__(self, master, *args, **kwargs):
        tk.Frame.__init__(self, master, *args, **kwargs)
        self.pack()
        btn = ttk.Button(self, text = "Press", command = self.openTopLevel)
        btn.pack()

    def openTopLevel(self):
        topLevelWindow = tk.Toplevel(self)
        # Make topLevelWindow remain on top until destroyed, or attribute changes.
        topLevelWindow.attributes('-topmost', 'true')

root = tk.Tk()
main = Example(root)
root.mainloop()