【问题标题】:Tkinter askopenfilename() won't openTkinter askopenfilename() 不会打开
【发布时间】:2018-12-06 21:25:26
【问题描述】:

我选择了一些我正在分析的 Excel 数据,并且最近添加了让用户打开文件资源管理器并直观地定位文件的功能,而不是在命令行上输入文件位置。我found this问题(和答案)使窗口出现,这工作了一段时间。

除了查找文件外,我仍在使用命令行处理所有内容。目前,这是我必须打开窗口的骨架(几乎与上面链接的问题的答案相同)

Tk().withdraw()
data_file_path = askopenfilename()

# other code with prompts, mostly print statements

Tk().withdraw()
drug_library_path = askopenfilename()

一旦代码到达前两行代码,命令行只是停留在一个闪烁的光标上,就像它在等待输入(我猜,askopenfilename() 返回文件位置),但什么也没有发生。我也不能ctrl+C 退出该计划。

我找到了this question,这与我正在寻找的内容很接近,但我使用的是 Windows,而不是 Mac,而且我什至无法打开窗口——我看到的大多数问题都在谈论无法关闭窗口。

感谢您的帮助!

注意:此时程序中,还没有加载任何来自 excel 的数据。这是运行的第一行之一。

【问题讨论】:

  • 我无法复制您的问题,所以我不太确定出了什么问题 - 但我会指出,您不应在任何程序中多次调用 Tk()。跨度>
  • 好的,我会解决这个问题,看看是否有任何变化。如果我有两个不同的函数执行此操作,我应该在每个函数中调用一次 Tk() 吗?

标签: python python-3.x tkinter


【解决方案1】:

改用easygui。它也是基于 tkinter 构建的,但与 filedialog 不同的是,它无需完整的 GUI 即可运行。

由于您使用的是Windows,请在命令行中(不是在python中)使用此命令来安装easygui:

py -m pip install easygui

然后试试这个代码:

import easygui

data_file_path = easygui.fileopenbox()

# other code with prompts, mostly print statements

drug_library_path = easygui.fileopenbox()

【讨论】:

  • 可以同时选择多个文件吗?
【解决方案2】:

我遇到了同样的问题,但我发现问题是我在调用 askopenfilename() 或 fileopenbox() 之前使用 input() 获取输入。

from   tkinter            import Tk
from   tkinter.filedialog import askopenfilename

var = input()
Tk().withdraw()
filepath = askopenfilename()

我只是简单地切换了 askopenfilename()(或 fileopenbox())和 input() 的位置,它照常工作。

Tk().withdraw()
filepath = askopenfilename()
var = input()

【讨论】:

  • 是的,这是一个答案。我可以添加代码使其更清晰。
  • 这里的input 是什么?
  • 这是一个python内置函数,用于获取用户的输入。你也可以把它写成 input("Enter value here: ") 这样用户就知道该怎么做了。
【解决方案3】:

如果要使用内部模块,可以导入tkFileDialog,调用:

filename = tkFileDialog.askopenfilename(title="Open Filename",filetypes=(("TXT Files","*.txt"),("All Files","*.*")))

我在很多项目中都使用这个,可以添加initialdir等参数,还可以指定允许的文件类型!

【讨论】:

  • 不就相当于使用tkinter吗?
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2020-11-11
  • 2014-03-30
  • 2019-10-31
  • 1970-01-01
  • 2019-01-10
相关资源
最近更新 更多