使用filedialog时隐藏tk窗口

问题描述 投票:0回答:3

我正在尝试使用

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

对话框在其他窗口后面打开,因此我使用 this 使对话框出现在前面。这可行,但后面仍然有一个我不想要的空窗口。我尝试过使用

root.withdraw()
但这只是隐藏了一切。我只想打开文件对话框,而不打开空的 tk 窗口。关于如何做到这一点有什么想法吗?

python-3.x tkinter
3个回答
4
投票

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

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% 透明,这样你就看不到它了。唯一的缺点是文件对话框窗口打开时会闪烁,但这并不是什么大问题。


0
投票

我有完全相同的要求,即使用控制台应用程序或脚本而不是 GUI 中的一些 tkinter.filedialog 函数。我对如何实现它的所有搜索都找到了涉及创建临时 tkinter 根窗口并在使用对话框后销毁它的答案。多年来我一直使用这样的解决方案,但总是对它产生的滞后感到恼火(有时,随机地,相当长)。

我最近发现你只需要调用对话框功能 - 不需要讨厌的根窗口!

from tkinter import filedialog

def getPath(): # now barely worth writing as a function!
    path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=(("Text Documents", "*.txt"),))
    return path

print(getPath())

这对我来说对 filedialog.askopenfilename、filedialog.askdirectory 等很有用,而且没有烦人的滞后。如果我早点看到这样的答案就好了!

如果它不适用于您的系统/版本,请发表评论。


-1
投票
from tkinter import Tk
from tkinter.filedialog import asksaveasfilename


def get_path():
    root = Tk()
    root.withdraw()
    path = asksaveasfilename()
    root.destroy()
    return(path)





print(get_path()) # to verify expected result

这是您正在寻找的行为吗?希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.