如何使用tkinter.filedialog askopenfiles打开多张图片

时间:2015-09-15 00:46:54

标签: python python-3.x tkinter python-3.4

我正在开展一个分析图像的大学研究项目,这些细节对于这个问题并不重要,为了清楚起见,我会将这些部分留下来。

我的代码非常适合单张图片,但我有多张图片的问题。 Tkinter在这方面确实没有很好的文档,而且我一直在努力解决这个问题。

以下是工作代码的示例

import matplotlib.pyplot as plt
from skimage import data
from tkinter.filedialog import askopenfile

image_formats= [("JPEG", "*.jpg")]
file_path = askopenfile(filetypes=image_formats, initialdir="/", title='Please select a picture to analyze')

image = data.imread(file_path.name)

plt.imshow(image)
plt.show()

此代码允许我点击一个图像在tkinter菜单中打开,但不允许按住Ctrl键单击多个图像

如果我改变了每个" askopenfile" to" askopenfile s "它允许我按住Ctrl键单击多个图像,但抛出错误:

image = data.imread(file_path.name)
AttributeError: 'NoneType' object has no attribute 'name'

我知道我必须循环打开每张图片,但我真的不知道我做错了什么,或者对于多张图片做正确的方法会是什么是

我正在寻找一种解决方案,允许用户按住Ctrl键点击多个图片,以便 tkinter 抓住 < strong>文件路径并将它们放入列表中以供skimage和matplotlib打开(以后再分析)。

很抱歉,如果这太复杂了,如果您需要更多解释或截图,我会非常乐意进行编辑,所以问题很明确。

1 个答案:

答案 0 :(得分:2)

如果您只想要使用名称 - askopenfilenames()。示例 -

import matplotlib.pyplot as plt
from skimage import data
from tkinter.filedialog import askopenfilenames

image_formats= [("JPEG", "*.jpg")]
file_path_list = askopenfilenames(filetypes=image_formats, initialdir="/", title='Please select a picture to analyze')

for file_path in file_path_list:
    image = data.imread(file_path)

    plt.imshow(image)
    plt.show()

askopenfile()实际上为您打开文件并返回该文件(或askopenfiles()打开所有文件并返回它们)。我不确定是什么导致file_path成为无。但