所以..我的程序有这个小问题。我可能需要解释一些基本的东西 - 特别是当通过 distutils 安装东西时会发生什么。
我在 Tkinter 制作的 GUI 应用程序中使用了两个图标。由于它们的位置,我在加载它们时遇到问题。
你可以看到我的setup.py
文件here 。您可以在第 28 行看到我指定的文件(它们位于子文件夹 gui/
中)。
当然,当您想要运行程序的 GUI 部分时(可以通过安装它并将其作为 flashstudy --gui
可执行文件运行来完成),问题就开始了。我在文件 main.py
第 44 和 45 行出现错误(文件为 here )。无法从该位置加载图像。
我想这是有道理的,因为它应该查找安装过程中传输文件的目录,但我不知道那个地方在哪里以及如何轻松加载它。
另一件事 - 如此设置的原因是这样您可以直接从终端运行程序和 GUI 部分而无需安装它,我想保留该功能。
有办法做到这一点吗?
最佳答案
如果您使用setuptools
与 distutils
不同,您可以可靠地包含数据文件并在安装后再次加载它们,无论数据文件是如何安装的。
您已经导入了 setuptools
但会忽略它;不要从 distutils.core
导入 setup
,而是从 setuptools
导入:
from setuptools import setup
使用package_data
或include_package_data
(而不是data_files
)选项来包含图像。请参阅Including Data Files在 setuptools
文档中:
package_data = {'gui': ['*.gif']}
然后您可以使用 pkg_resources
Resource API 加载您的包数据。对于 TKinter PhotoImage
对象,您需要一个文件名,因此您可以使用:
icon_up = PhotoImage(
file=pkg_resources.resource_filename('flashCardStudy', 'gui/up.gif'))
就个人而言,我会在源中嵌入一个 base64 数据字符串,并将其用作图标:
icon_up_data = '''\
R0lGODlhEAAQAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAAQABAAAAIflI+pywfQ0ovuQWpv
y3PzyHVKKErkQlpjqhmsSsVRAQA7
'''
icon_up = PhotoImage(data=icon_up_data)
这完全绕过了整个问题。但请注意,这仅适用于 GIF 图像。
关于python - 如何在Python中正确加载数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006638/