我正在开发一个程序,该程序使用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允许我做的事情吗?
答案 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()