当前位置: 首页 > 知识库问答 >
问题:

Python应用程序在运行时找不到图像(.png)文件

松兴邦
2023-03-14

所以我用tkinter GUI构建了这个python应用程序。我使用pyinstaller来转换。将py文件转换为可执行(.exe)文件,以便我可以将其发送给非技术人员使用。

当我运行这两行注释掉的代码时...

root = tk.Tk()
root.title("DOJ Pricing Analyzer")
root.resizable(False,False)
#canvas1 = tk.Canvas(root, width = 350, height = 500, bg = 'white') <-----------This line commented out
#image = ImageTk.PhotoImage( file = "matrix.png" )<--------------This line commented out
canvas1.create_image(0, 0, image = image, anchor = NW)
canvas1.create_text(185,75,fill="white",font="Impact 15 ",

除了主窗口是空白的白色画布外,应用程序在执行时(在Windows中以.exe格式)运行良好。

问题是我需要这个应用程序来利用matrix.png,这样用户界面看起来就很酷,不会无聊。

所以经过几个小时的研究,我试着用许多不同的方式摆弄. spec文件。我以为这会做到这一点......我只是添加了matrix.png文件到数据),然后运行pyInster DOJPriceAnalyzer.py--onefile从Powershell

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None


a = Analysis(['DOJPriceAnalyzer.py'],
             pathex=['C:\\Users\\CV7617\\Desktop\\program'],
             binaries=[],
             datas=[('C:\\Users\\CV7617\\Desktop\\program\matrix.png','.')],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='DOJPriceAnalyzer',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True )

但是在运行了这个程序之后。它产生的exe,我留下了这个错误:


Traceback (most recent call last):
  File "DOJPriceAnalyzer.py", line 16, in <module>
  File "site-packages\PIL\ImageTk.py", line 89, in __init__
  File "site-packages\PIL\ImageTk.py", line 58, in _get_image_from_kw
  File "site-packages\PIL\Image.py", line 2809, in open
FileNotFoundError: [Errno 2] No such file or directory: 'matrix.png'
[3080] Failed to execute script DOJPriceAnalyzer
Exception ignored in: <function PhotoImage.__del__ at 0x0F9F07C8>
Traceback (most recent call last):
  File "site-packages\PIL\ImageTk.py", line 118, in __del__
AttributeError: 'PhotoImage' object has no attribute '_PhotoImage__photo'

我已经尝试了很多东西的组合(在这一点上失去了计数),包括这个...(修改. spec文件到这些,然后通过运行pyInster DOJPriceAnalyzer.py--onefile,然后运行. exe文件)

datas=[(matrix.png','.')],

datas=[('C:\\Users\\CV7617\\Desktop\\program','data')],

但这些都会产生相同的错误。有什么建议吗?

共有1个答案

邹博明
2023-03-14

我认为问题在于,您没有保留对图像的引用。请查看此链接以获取解释。

要添加永久引用,只需添加一行,如

canvas1.im = image

canvas.create_image文档确实提到了这一点

“图像对象。这应该是PhotoImage或BitmapImage,或兼容对象(如PIL PhotoImage)。应用程序必须保留对图像对象的引用”,但很容易忽略这一点!

我也不认为这是一个具体的问题。将图像添加到spec文件中的数据的方法是正确的,应该可以正常工作。

datas = [('matrix.png','.')]

我试图用您提供的代码片段重现您的案例,我能够复制错误,然后用此方法修复它,所以希望这也能帮助您。

 类似资料:
  • 问题内容: 我正在使用Flask,一个适用于Python的网络框架。Flask使用Jinja渲染模板。我不知道Jinja Flask使用哪个版本,也不知道如何检索Jinja版本或Flask版本。我使用python版本2.7。 该模板在css / image目录中包含一个图像。直接在Firefox浏览器中以文件形式查看模板时,此图像可见。 但是在执行Flask时不是: HTML文件的内容: 模板运行

  • 问题内容: 我试过了。但是,由于我还很陌生,所以无法弄清问题。我已附上了几个屏幕截图,以查看我现在面临的问题。 问题答案: 缺少提供者并不重要,这仅意味着您没有任何提供者。 您有一个,但如果您将Jersey过滤器映射到上下文根(/),这是正确的说那里没有资源-根据屏幕截图,您只有一个资源,/emp从此开始,CRUD操作的子资源会更深路径。 编辑:第二眼,您在中。我认为这不应该基于您似乎试图将一个简

  • 我是Android Studio的新手。我现在使用它是希望获得一些错误消息,以解释为什么我的APK不能在蓝色堆栈中运行。APK是在Unity中建造的。 在安装了Android Studio,一个手机模拟器等之后,我仍然无法运行apk。它说: 在堆栈溢出中已经有一个关于这个错误的帖子。但是,我的AndroidManifest.xml在我看来很好。我也尝试过‘无效缓存/重新启动’但没有效果。当我转到“

  • 我的应用程序可以在eclipse或gradlew bootRun中运行。但是当我通过gradlew buildapp.jar构建一个“胖”jar文件,然后通过java-jarapp.jar启动应用程序时,我收到以下错误: 错误 - 无法获取密钥库的修改时间: kafka_truststore.jks java.nio.file.NoSuchFile异常: kafka_truststore.jks

  • 问题内容: 首先-是的,我已经阅读了有关此主题的多个问题和答案,但无法从中获得任何解决方案来帮助我。我没有运行Tomcat或JBoss,也没有要更改的文件。我正在使用Java 6.0和。 我正在使用IDEA IntelliJ创建一个可运行的jar文件,其中jar库是单独打包并通过清单链接的。我因此在Linux服务器上运行代码: 我的log4j配置文件(已放在和中,以防万一)是: 为了防万一,我再次