使用buildozer构建后,kivy应用程序中文件的路径无效

时间:2016-06-12 11:14:47

标签: python kivy buildozer

我正在尝试使用buildozer虚拟机构建一个kivy应用。只要我的main.py不包含任何特定的文件路径,它就可以正常工作。 例如,在我的应用程序中,我想显示图像。如果我在Windows上运行,我会将源指定为

C:\pathtoapp\img\image.png

在Ubuntu中它将是

/home/pathtoapp/img/image.png

如果我尝试使用buildozer构建应用程序,我会收到错误消息:

I/Python (15649): [Error   ] [Image  ] Error reading file 

然后是上面的路径。 这是一个适用于Ubuntu的示例,但在部署到我的Android手机时会出现上述错误消息:

from kivy.lang import Builder
from kivy.app import App
from kivy.uix.image import Image


kv = '''
BoxLayout:
    Image:
        source: app.image
'''


class Test(App):
    def build(self):
        self.image = '/home/kivy/Desktop/test/img/g3347.png' 
        print(self.image)
        return Builder.load_string(kv)

if __name__ == '__main__':
    Test().run()

现在我感到困惑,因为我不知道如何在我的代码中正确指定路径。

1 个答案:

答案 0 :(得分:2)

当然它会给出错误信息。你在Android上也没有这样的路径,也没有在Windows上。使用Kivy,您可以使用relative paths,如果您使用以下内容,这应该可以使用:

self.image = 'g3347.png'

如果该文件位于您的main.py / main.pyo的目录中。在过去,它有时在Android上对我不起作用,所以我有一个"安全捕获"这样我就不会再遇到这个问题了(现在应该可以使用,但比对不起更安全):

os.path.dirname(os.path.abspath(__file__))

将返回main.py文件夹的路径,您可以像这样使用它:

path = os.path.dirname(os.path.abspath(__file__))
self.image = path + '/g3347.png'

我还习惯将路径放在App类中,以便我可以随时访问它。

对于更多花哨的路径,请查看App.user_data_dir,它也为您解决了这个问题,但如果您在卸载后丢失一些东西,那么它并不是一个好问题。如果您在Windows上并决定删除您的应用程序,但不知何故忘记从%appdata%%localappdata%删除您的文件夹。