如何在 tkinter 中将顶层 window 放在主 window 前面?

How to put a toplevel window in front of the main window in tkinter?

有什么方法可以在主 window 前面放一个顶层 window 吗?

代码如下:

from tkinter import *

root = Tk()
root.geometry('1280x720')

def create_new_window():
    root2 = Toplevel()
    root2.geometry('500x500')

create_new_window()

mainloop()

在这里,我希望 root2 window 始终位于 root window 之前。

我尝试使用 root2.attributes('-topmost' , 1),但问题是这一行也将 window 置于所有其他程序之上。

我要的是顶层window只在主层window的前面,点击主层window就再也不回头了。

有什么方法可以在 tkinter 中实现吗?

如果有人能帮助我就太好了。

所以你可以做这样的事情,但对我来说似乎有问题。 我所做的是将 FocusOut 事件绑定到创建的顶层,因此每次它失去焦点时都会触发事件 stackingorder 到把windos放在正确的顺序。您可能需要为您选择的几个事件使此代码过期,但为了让您了解.. 这是代码:

import tkinter as tk

def add_toplevel(idx, toplevel):
    if idx == 'end':
        idx = len(toplevels)
    toplevels.insert(idx,toplevel)

def create_new_window():
    root2 = tk.Toplevel()
    root2.geometry('500x500')
    add_toplevel('end',root2)
    root2.bind('<FocusOut>', stackingorder)

def stackingorder(event):
    for toplevel in toplevels:
        toplevel.lift()
        toplevel.update_idletasks()

toplevels = [] #stacking order by index

root = tk.Tk()

create_new_window()


root.mainloop()

您可能也对此感兴趣:

我认为你想要的是短暂的window,你需要做的是:

root2.wm_transient(root)

来自手册:

wm 瞬变 window ?master? 如果指定了 master,则通知 window 管理器 window 是代表 master 工作的临时 window(例如下拉菜单)(其中 master 是顶级 window)。如果将 master 指定为空字符串,则 window 将不再标记为瞬态 window。否则命令 returns window 的当前主节点的路径名,如果 window 当前不是瞬态 window,则为空字符串。瞬态 window 将镜像 master 中的状态更改,并在初始映射时继承 master 的状态。试图使 window 成为自身的瞬态是错误的。