tkinter子窗口打开文件对话框时根窗口自动前置如何解决
问题根因
文件对话框默认关联Tk根窗口作为父容器,触发对话框时会自动将关联的父窗口前置,才会出现根窗口跳到最前方的问题;给子窗口设置-topmost=True会强制子窗口层级高于所有系统窗口,自然会覆盖文件对话框。
解决方法
第一步:给文件对话框绑定子窗口作为父容器
调用filedialog系列方法时,显式传入parent参数指定父窗口为当前子窗口实例,触发对话框时只会关联子窗口,不会唤醒根窗口。
示例代码:# 写在子窗口类的按钮回调方法中 from tkinter import filedialog def select_file(self): # parent参数赋值为子窗口实例self file_path = filedialog.askopenfilename(parent=self, title="选择文件")第二步:给子窗口设置归属关系替代全局置顶
无需给子窗口设置-topmost=True,改为调用transient()方法声明子窗口归属于根窗口,子窗口会始终显示在根窗口上方,且不会影响系统对话框的层级:# 子窗口Toplevel实例初始化后添加 child_window.transient(root) # root为你的根窗口实例 child_window.lift()可选:强制根窗口始终处于底层
如果需要彻底避免根窗口被任何操作唤起前置,可以给根窗口绑定<Map>事件,只要根窗口被触发前置就自动沉底:# 根窗口初始化时添加绑定 root.bind("<Map>", lambda e: root.lower())
内容的提问来源于stack exchange,提问作者Naveh Elya
相关产品推荐
相关产品推荐

