2016-06-12 8 views
1

私はbuildozer仮想マシンを使用してkivyアプリケーションを構築しようとしています。私のmain.pyにファイルへの特定のパスが含まれていない限り正常に動作します。 たとえば、私のアプリではイメージを表示したいと考えています。koobyappのファイルへのパスがbuildozerでビルドした後に無効になる

I/Python (15649): [Error ] [Image ] Error reading file 
:私はWindows上で実行する場合、私は

それが

/home/pathtoapp/img/image.png 

私はbuildozerでアプリケーションを構築しようとすると、私はエラーメッセージが表示されますでしょうUbuntuので

C:\pathtoapp\img\image.png 

としてソースをspecifiyう

と上記のパス。ここ は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

もちろん、エラーメッセージが表示されます。あなたはAndroidやWindows上にこのようなパスを持っていません。そのファイルがmain.py/main.pyoのディレクトリにある場合

self.image = 'g3347.png' 

:Kivyを使えば、あなたがのようなものを使用している場合は動くはずです、relative pathsを使用することができます。以前はAndroidで私にとってうまくいきませんでしたので、私はもうこの問題に遭遇しないように "安全キャッチ"を持っています(今はうまくいくはずですが、残念ながら安全です)。

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

関連する問題