如何在data_files中添加文件后引用源代码中的文件

时间:2015-02-07 15:26:48

标签: python user-interface python-3.x tkinter py2app

我刚开始尝试将我的python代码转换为.app文件来运行它。我成功地能够创建.app文件,但是每当有图片时我都会收到错误消息。它找不到文件或目录。所以,我将它们放在setup.py中的data_files中,如下所示:

from setuptools import setup
from glob import glob

DATA_FILES = [
    ('images', glob('GamePics/*.gif')),
]
setup(app=['Wellness Game.py'],
data_files=DATA_FILES,
setup_requires=["py2app"])

然后我使用新的setup.py重新创建.app文件,但我仍然收到相同的错误消息。这就是我在源代码中引用图片的方式。

downstairspic=PhotoImage(file="../GamePics/DownStairs.gif")

请帮忙!我不明白为什么它不起作用!

1 个答案:

答案 0 :(得分:0)

您需要引用相关于要加载的python文件的文件。在你的情况下,一个简单的

downstairspic=PhotoImage(file="os.path.join(
   os.path.dirname(__file__), ../GamePics/DownStairs.gif")
)

在每个python模块中(除了 main - 模块之外),文件应该指向该模块所在的绝对路径。

这里也有一些替代方案 - setuptools资源,就像你在Mac上一样,你也可以使用

NSBundle.mainBundle().pathForResource_ofType_("DownStairs", "gif")

但这意味着你需要pyobjc。

以下setup.py对我有用:

导入系统     来自setuptools导入设置,find_packages     import glob,subprocess     import os

ICON = "Cyclops.icns"

plist = {
    "CFBundleIconFile" : ICON,
    "CFBundleIdentifier" : "com.laseranimation.Cyclops",
    }


execfile("cyclops/version.py")

setup(
    name = "Cyclops",
    version = VERSION,
    packages = find_packages(),
    author = "Diez B. Roggisch",
    author_email = "deets@web.de",
    description = "A flexible Laser-Scanner to OSC converter with Filtering",
    license = "",
    keywords = "python pyobjc",
    app=["Cyclops.py"],
    data_files=["English.lproj", "Resources/" + ICON] + glob.glob("Resources/*qtz"),
    options=dict(py2app=dict(
        plist=plist,
    )),
)