如何在 tkinter 的主窗口前面放置一个顶层窗口?

如何解决如何在 tkinter 的主窗口前面放置一个顶层窗口?

有没有办法在主窗口前面放一个顶层窗口?

代码如下:

from tkinter import *

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

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

create_new_window()

mainloop()

在这里,我希望 root2 窗口始终位于 root 窗口的前面。

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

我想要的是顶层窗口应该只在主窗口的前面,并且当我点击主窗口时它不应该返回。

有没有办法在 tkinter 中实现这一点?

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

解决方法

我认为你想要的是一个短暂的窗口,你需要做:

root2.wm_transient(root)

来自手册:

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

,

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

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

您可能也对这个感兴趣: https://stackoverflow.com/a/10391659/13629335

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?