【问题标题】:Pyinstaller with tkinter and a custom folder带有 tkinter 和自定义文件夹的 Pyinstaller
【发布时间】: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


【解决方案1】:

可执行文件在源代码以前的位置吗?当 pyinstaller 符合要求时,它会将所有内容放在一个子文件夹中——切断对文件夹外任何内容的访问,并阻止您访问您的图像。

如果是这种情况,那么您只需将可执行文件移回源代码的原始文件夹位置即可。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    相关资源
    最近更新 更多