首页 > 解决方案 > 使用 filedialog 时隐藏 tk 窗口

问题描述

我正在尝试使用filedialog.asksavefilename获取保存文件路径。我在 IDLE shell 中运行这段代码,它是一个基于文本的界面。这是获取保存路径的函数:

def getPath():
    root=tk.Tk()
    root.lift()
    root.attributes('-topmost',True)
    root.after_idle(root.attributes,'-topmost',False)
    path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=(("Text Documents", "*.txt"),))
    root.destroy()

对话框在其他窗口后面打开,所以我用来使对话框出现在前面。这可行,但它后面仍然有一个我不想要的空窗口。我试过使用root.withdraw(),但这只是隐藏了一切。我只想打开文件对话框而不打开空的 tk 窗口。关于如何做到这一点的任何想法?

标签: python-3.xtkinter

解决方案


我找到了一种达到预期效果的方法:

def getPath():
    root=tk.Tk()
    root.overrideredirect(True)
    root.attributes("-alpha", 0)
    path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=(("Text Documents", "*.txt"),))
    root.destroy()

我已经删除了所有不必要的lift部分topmost- 他们没有帮助。我曾经root.overrideredirect(True)删除标题栏root.attributes("-alpha", 0)并使窗口 100% 透明,所以你看不到它。唯一的缺点是文件对话框窗口在打开时会闪烁,但这并不是什么大问题。


推荐阅读