【问题标题】:Tkinter Toplevel always in frontTkinter Toplevel 总是在前面
【发布时间】:2017-12-26 03:33:04
【问题描述】:

我正在开发一个程序,该程序使用 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()

当您按下按钮并打开顶层​​窗口时,它位于顶部。但是如果你抓住框架,移动它等等,顶层会在它后面。我该如何阻止它?或者这不是 Tkinter 允许我做的事情?

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2018-12-18
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多