我正在开展一个分析图像的大学研究项目,这些细节对于这个问题并不重要,为了清楚起见,我会将这些部分留下来。
我的代码非常适合单张图片,但我有多张图片的问题。 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打开(以后再分析)。
很抱歉,如果这太复杂了,如果您需要更多解释或截图,我会非常乐意进行编辑,所以问题很明确。
答案 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
成为无。但