python-3.x - 使用 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 窗口。关于如何做到这一点的任何想法?
解决方案
我找到了一种达到预期效果的方法:
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% 透明,所以你看不到它。唯一的缺点是文件对话框窗口在打开时会闪烁,但这并不是什么大问题。
推荐阅读
- amazon-redshift - Redshift:stv_inflight 和 stv_recents 显示冲突的结果
- javascript - 未捕获的 TypeError:svmd_es.Button 不是在 svelte 中实现 UI 工具包的构造函数
- jquery - 可以在 IE8 上运行的 jquery 幻灯片放映
- python - (-1, 784) 的形状与输入大小为 200 之间的冲突
- vue.js - 无法使用 vue.js 全局注册自定义组件
- vue.js - 如何使用 Vue Router 使用搜索过滤器和标签来实现这种路由结构?
- windows-store-apps - 从其“ID”中查找 Windows 商店应用程序的 .exe 路径
- powershell - 使用以 some-pattern 开头并以 other-pattern 结尾的搜索模式过滤 powershell 输出
- java - 如何通过拆分字符串来创建 Person 对象
- c# - 如何使用 ASP.NET 核心 mvc 中的下拉列表更新每页显示的元素数量?