1

所以..我的程序有这个小问题。我可能需要解释一些基本的东西——尤其是通过 distutils 安装东西时会发生什么。

我在 Tkinter 制作的 GUI 应用程序中使用了两个图标。由于它们的位置,我在加载它们时遇到问题。

你可以在这里看到我的setup.py文件。您可以在第 28 行看到我指定的文件(它们位于 subfolder 中)。gui/

当然,当您想要运行程序的 GUI 部分时问题就开始了(可以通过安装它并将其作为flashstudy --gui可执行文件运行来完成)。我main.py在第 44 行和第 45 行的文件中出现错误(文件在此处)。无法从该位置加载图像。

我想这是有道理的,因为它应该查看在安装过程中传输文件的目录,但我不知道那个地方在哪里以及如何轻松加载它。

另一件事 - 以这种方式设置的原因是您可以直接从终端运行程序和 GUI 部分而无需安装它,我想保留该功能。

有没有办法以某种方式做到这一点?

4

1 回答 1

2

如果您使用setuptools而不是distutils,您可以可靠地包含数据文件并在安装后再次加载它们,而不管数据文件是如何安装的。

您已经导入setuptools但在其他情况下忽略它;而不是setupdistutils.core导入,从导入它setuptools

from setuptools import setup

使用package_dataor include_package_data,而不是data_files选项来包含您的图像。请参阅在文档中包含数据文件setuptools

package_data = {'gui': ['*.gif']}

pkg_resources 然后,您可以使用Resource API加载您的包数据。对于 TKinterPhotoImage对象,您需要一个文件名,因此您可以使用:

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 图像。

于 2015-01-18T03:07:52.083 回答