【发布时间】:2021-12-13 02:57:30
【问题描述】:
我正在努力解决这个问题。我有一个带有使用 Tkinter 的 GUI 的小 Python 脚本。此脚本需要访问文件夹以保存和查看图像。这在使用脚本并从命令行运行时有效。但是我想用 pyinstaller 将它构建为一个单文件应用程序。虽然构建工作正常且 GUI 工作正常,但无法从文件夹中保存和查看图像。该脚本旨在从脚本向下的目录中查找文件夹:
APP_FOLDER = os.path.dirname(os.path.abspath(__file__))
for base, dirs, files in os.walk(APP_FOLDER+'/backgrounds'):
for file in files:
if not file.startswith('.'):
action_with_arg = partial(setBG, APP_FOLDER+'/backgrounds/'+file)
BGArray.append(APP_FOLDER+'/backgrounds/'+file)
img = Image.open(APP_FOLDER+'/backgrounds/'+file)
img = img.resize((int(img.size[0]/10),int(img.size[1]/10)))
img1 = ImageTk.PhotoImage(img)
button = ttk.Button(frameBG.scrollable_frame,image=img1,command=action_with_arg)
button.image = img1
button.pack(side=tk.TOP)
感谢任何帮助。
【问题讨论】:
-
您希望能够使用您的应用从文件夹中打开图像吗?某事就像一个默认的应用程序,用于打开带有
.png扩展名的文件? -
我怀疑有两个可能的问题。一是确保图像文件包含在 pyinstaller 构建中。另一个是确保它们的路径与
__file__出现的路径相同。要调试,也许你应该有一些关于__file__打包时的打印语句,并且只列出os.path.dirname(__file__)下的文件 -
正确。我想在我的应用中打开并显示一张图片 - 甚至将图片复制到我的应用内的背景文件夹中。
-
sys.executable可能会代替__file__,我不确定。记得很多年前有过类似的问题,不记得我是如何解决的,但我发现__file__不起作用。 -
@AndrewAllaire - 你给我指出了正确的方向。它不是 sys.executable,它的 sys._MEIPASS。这有效,似乎解决了我的问题。谢谢。
标签: python tkinter python-imaging-library pyinstaller