繁体   English   中英

如何在Python中正确加载数据文件

[英]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_datainclude_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM