[英]How to properly load data files in Python
所以..我的程序有这个小问题。 我可能需要解释一些基本内容-特别是通过distutils安装内容时会发生什么。
我在Tkinter制作的GUI应用程序中使用了两个图标。 由于它们的位置,我在加载它们时遇到了问题。
您可以在此处看到我的setup.py
文件。 您可以在第28行看到我指定的文件(它们位于子文件夹gui/
)。
当然,当您要运行程序的GUI部分时,问题就开始了(可以通过安装程序并将其作为flashstudy --gui
可执行文件来运行)。 我得到错误的文件main.py
在线44&45(该文件是在这里 )。 无法从该位置加载图像。
我猜这是有道理的,因为它应该在安装过程中查找文件在其中传输的目录,但我不知道该位置在哪里以及如何轻松加载它。
另一件事-以这种方式进行设置的原因是,您可以直接从终端运行程序和GUI部分,而无需安装它,我想保留该功能。
有办法做到这一点吗?
如果使用setuptools
而不是distutils
,则可以可靠地包含数据文件并在安装后再次加载它们,而不管数据文件的安装方式如何。
您已经导入了setuptools
但是忽略了它; 而不是从distutils.core
导入setup
,而是从setuptools
导入它:
from setuptools import setup
使用package_data
或include_package_data
而不是data_files
选项来包含图像。 请参阅setuptools
文档中的包括数据文件 :
package_data = {'gui': ['*.gif']}
然后,您可以使用pkg_resources
资源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图像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.