我正在研究一个脚本,该脚本允许用户在其计算机上选择一个文件(图像),然后在脚本中对其进行处理。所有这些都没有问题。脚本的最后一部分使用AppJar创建GUI,并显示从先前处理中收集的信息。但是,唯一不起作用的是使用GUI显示用户在开始时选择的图像。以下是代码片段,这些代码片段负责上述功能。
选择文件
Tk().withdraw()
filename = askopenfilename()
print(filename)
Tk().destroy()
启动GUI并添加图片:
app = gui()
app.setImageLocation(filename)
app.addImage(Processed_Image, filename, compound=None)
for i in range(0, extractor):
app.addLabel(f"f{number}", labels1[diction_counter])
number += 1
diction_counter += 1
app.go()
除图像外,GUI均有效。返回以下错误:
Exception: Invalid image location: /Users/xxx/Pictures/2017_10_31/IMG_5271.JPG
我感谢有关如何解决此问题的所有提示。
更新日期:
在尝试了XanderMJ和Malte提出的解决方案之后,唯一仍然无法按预期方式工作的是GUI中的图像。但是,文件的位置(一开始就是问题)已由Malte提出的代码解决。但是在运行代码时,我收到以下错误消息:
app.addImage("Analyzed", filename, compound=None)
File "/Users/XXX/anaconda3/lib/python3.6/site-packages/appJar/appjar.py", line
7118, in addImage
self._addImageObj(name, imgObj, row, column, colspan, rowspan,
compound=compound)
File "/Users/XXX/anaconda3/lib/python3.6/site-packages/appJar/appjar.py", line
7144, in _addImageObj
label.config(anchor=CENTER,
font=self._getContainerProperty('labelFont'),image=img)
File "/Users/XXX/anaconda3/lib/python3.6/tkinter/__init__.py", line 1482, in
configure
return self._configure('configure', cnf, kw)
File "/Users/XXX/anaconda3/lib/python3.6/tkinter/__init__.py", line 1473, in
_configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: image "pyimage1" doesn't exist
有关此错误的有趣部分是,开头选择的图像未称为pyimage1,但具有诸如“ img_1245.jpg”的名称。此外,将代码作为单独的程序运行,而没有将变量作为文件或路径的名称,则代码可以正常工作。以下是我刚才提到的有无变量的代码部分。
此代码不会引起问题:
from appJar import gui
from PIL import Image, ImageTk
app = gui()
app.setImageLocation("/Users/XXX/Desktop")
app.addImage("test", "road.jpg")
app.zoomImage("test", -3)
app.go()
此代码会导致先前显示的错误:
app = gui()
app.setImageLocation(directory)
app.addImage("Analyzed", filename)
for i in range(0, extractor):
app.addLabel(f"f{number}", labels1[diction_counter])
number += 1
diction_counter += 1
app.go()
答案 0 :(得分:1)
快速浏览一下AppJar文档:link
.setImageLocation(location)设置图像文件的文件夹。它将被放置在所使用的任何图像文件的名称之前。
目前,您正在尝试指定查找图像的路径,但是您提供的路径是1张图像的路径。将其更改为app.setImageLocation(folder_paht)
,然后在使用app.addImage('file.png')
时为图像提供一个文件名。
因此,您必须获取文件的文件夹路径,我建议检查this post有关获取文件夹路径而不是文件路径。然后,您可以列出此文件夹中具有特定扩展名(link)的所有文件
希望这会有所帮助!
答案 1 :(得分:0)
通过将文件路径功能更新为以下内容,您可以单独提取目录,带有文件名的目录和文件名:
Tk().withdraw()
path = askopenfilename()
filename = os.path.basename(path)
directory = os.path.split(path)[0]
Tk().destroy()
如果尚未导入import os.path
,则需要导入。
此外,要显示图像/图片,应执行以下操作:
app.setImageLocation(directory)
app.addImage(title, file, compound=None)
希望这会有所帮助!