1

我正在尝试使用 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()

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

4

1 回答 1

2

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

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%or中删除您的文件夹%localappdata%

于 2016-06-12T13:48:24.210 回答