2016-06-12 8 views
1

buildozer 가상 시스템을 사용하여 kivy 앱을 빌드하려고합니다. 내 main.py 파일에 대한 특정 경로를 포함하지 않는 한 잘 작동합니다. 예를 들어, 내 앱에서 이미지를 표시하려고합니다.buildozer로 빌드 한 후 kivy 앱의 파일 경로가 유효하지 않습니다.

I/Python (15649): [Error ] [Image ] Error reading file 
: 나는 윈도우에서 실행하면, 나는 내가 오류 메시지가 얻을 buildozer와 응용 프로그램을 구축하려고하면이

/home/pathtoapp/img/image.png 

될 것이라고 우분투에서

C:\pathtoapp\img\image.png 

과 소스에서 지정할 것

그리고 위의 경로. 내가 제대로 내 코드의 경로를 지정하는 방법을 알고하지 않는

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

물론 오류 메시지가 나타납니다. Android 나 Windows에서는 이러한 경로가 없습니다. 그 파일이 main.py/main.pyo과 디렉토리에있는 경우

self.image = 'g3347.png' 

: Kivy하면 당신은 같은 것을 사용하는 경우 작업을해야하는 relative paths를 사용할 수 있습니다. 과거에는 가끔 안드로이드에 나를 위해 작동하지 않았다, 그래서 나는 더 이상이 문제가 발생하지 않을 있도록 "안전 캐치"가 (지금은 작동하지만 미안보다 더 안전합니다) :

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

main.py 폴더의 경로를 반환하고이 같이 사용할 수있다 : 나는 또한 내가 항상 액세스 할 수 있도록 App 클래스의 경로를 넣어 사용 해요

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

.

환상적인 경로를 보려면 App.user_data_dir을 찾아보세요.이 문제는 나에게도 도움이됩니다. 예를 들면 다음을 제거하면 문제가 생길 수 있습니다. Windows에서 응용 프로그램을 제거하기로 결정했지만 %appdata% 또는 %localappdata%에서 폴더를 제거하는 것을 잊어 버린 경우

+0

와우, 나 자신을 알아 냈어 야했다. 고마워. 그것은 상대 경로와 함께 작동하지만 나는 미래에 문제가 발생할 경우를 대비해서 안전을 유지할 것입니다. – Jobiwan

관련 문제