2017-10-10 2 views
1

Ceci est une application écrite en python 2.7 en utilisant les modules kivy et numpy. J'ai installé buildozer en suivant les étapes dans ce lien: https://github.com/kivy/buildozer, je n'ai pas fait sudo pip install https://github.com/kivy/buildozer/archive/master.zip. Après avoir déployé l'application sur Android buildozer android deploy run logcat j'ai vu quelques erreurs sur le journal:App fonctionne bien sur Windows en Python2 et Python3, mais en recevant Erreur: n'a pas réussi à importer Android, et le bouton ne répond pas

10-10 17:44:49.497 19176 19207 I python : [ERROR ] [Image  ] Error reading file .\logo_example1.png 
10-10 17:44:49.498 19176 19207 I python : [WARNING] [Base  ] Unknown <android> provider 
10-10 17:44:49.498 19176 19207 I python : [INFO ] [Base  ] Start application main loop 
10-10 17:44:49.503 19176 19207 I python : [INFO ] [GL   ] NPOT texture support is available 
10-10 17:44:49.504 19176 19207 I python : 0 
10-10 17:44:49.504 19176 19207 I python : coloring 
10-10 17:44:49.505 19176 19207 I python : [ERROR ] [Base  ] Failed to import "android" module. Could not remove android presplash. 

Problème: Le widget Image ne montre pas, et le touch pour le bouton ne semble pas recevoir tout état de cause/réponse. Puis-je avoir des commentaires à ce sujet, merci.

actuelle partiellement résolu: Le widget Image montre maintenant, je change l'adresse source .\\logo_example1.png-logo_example1.png.

problème existant: le widget Button ne répond toujours pas à toucher sur Android, mais fonctionne très bien sur Windows.

code pour tester les boutons Start et Retour:

C'est le main.kv:

#: import Main main  
<[email protected]>: 
    font_size:30 
    size:100, 50 
<[email protected]>: 
    font_size:30 
    size:100, 50 
    text: "Back" 
    pos: Main.Wsize[0]+100, Main.Wsize[1]+100 
<mainWidget>: 
    id: main_widget 
<homeWidget>: 
    id: home_widget 
    padding : 200 
    Image: 
     id:logo 
     source: 'logo_example1.png' 
     center: 300, 450 
    CtmButton: 
     id: start_button 
     text: "Start" 
     center:300, 200 
     on_release: home_widget.startbutton_function() 
    ## I also have tried replacing this with on_touch_down 
    ## to see whether it will solve the problem 
<puzzleWidget>: 
    id: puzzle_widget 
    BackButton: 
     id: back_button_1 
     center: 100, 37.5 
     on_release: puzzle_widget.backbutton_function() 

C'est le main.py:

import kivy 
from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.uix.label import Label 
from kivy.core.window import Window 
from kivy.uix.image import Image 
from kivy.core.image import ImageData 
from kivy.clock import Clock 
from kivy.graphics import Rectangle 
import time 
import math 
import itertools 
import numpy 
Window.clearcolor = (0.2, 0.25, 0.2, 0.5); col_dx = 0.005; y = list(Window.clearcolor); xstart = 0; 
Window.size = (600, 700); Wsize = Window.size; 
class mainWidget(Widget): 
    def __init__(self): 
     Widget.__init__(self); 
     home = homeWidget(); self.add_widget(home); 
class homeWidget(Widget): 
    def __init__(self): 
     Widget.__init__(self); 
     self.bg_animate(); 
    def printingsomething(self, dt): 
     print(dt); 
    def bg_animate(self): 
     global bg_anim 
     self.bg_anim = Clock.schedule_interval(self.printingsomething,1/40); 
     self.bg_anim(); 
    def startbutton_function(self): 
     print('start pressed'); 
     self.bg_anim.cancel(); 
     mainw.clear_widgets(); 
     mainw.add_widget(puzzleWidget()); 
class puzzleWidget(Widget): 
    def __init__(self): 
     Widget.__init__(self); 
     self.Bar1 = Image(size = [600, 75], color = list(Window.clearcolor)); self.Bar1.color[-1] = 0.8; self.Bar1.pos = [0, 700 - self.Bar1.size[1]]; 
     self.Bar2 = Image(size = [600, 75], color = list(Window.clearcolor)); self.Bar2.color[-1] = 0.8; self.Bar2.pos = [0, 0]; 
     #### ADD WIDGET(S): 
     self.add_widget(self.Bar1); self.add_widget(self.Bar2); 
     self.remove_widget(self.ids.back_button_1); self.add_widget(self.ids.back_button_1); 
    def backbutton_function(self): 
     print('back pressed'); 
     self.clear_widgets(); 
     mainw.clear_widgets(); 
     mainw.add_widget(homeWidget()); 
################## main window for the app ######################### 
class mainApp(App):  
    def build(self): 
     global mainw 
     mainw = mainWidget(); 
     return mainw 
#################################################################### 
mainApp = mainApp() 
mainApp.run(); 
+0

vous devrez peut-être ajouter 'android' à vos besoins dans buildozer.spec. – Tshirtman

+0

@Tshirtman puis-je demander pourquoi ..? Je pensais que les étapes officielles seraient assez compactes. – Arief

+0

@Tshirtman Je l'ai essayé, et le bouton ne reçoit toujours aucune réponse. – Arief

Répondre

1

Échec de l'importation "android" module.

Ce message n'a rien à voir avec l'image. Cela n'affectera pas votre projet si vous n'utilisez pas explicitement le module android. Tout ce que vous devez faire pour éviter cette ligne dans les journaux est d'ajouter android aux exigences à l'intérieur de buildozer.spec.

fichier de lecture d'erreur. \ Logo_example1.png de

Cette erreur indique que l'image ne peut pas être trouvé. Je ne sais pas quel est le problème avec .\\logo_example1.png, mais il est préférable d'utiliser le chemin absolu et d'oublier les problèmes.

import os 

root_dir = os.path.dirname(os.path.abspath(__file__)) 
img_rel = 'logo_example1.png' 
img_abs = os.path.join(root_dir, img_rel) 

print(img_abs) 

Upd:

problème pressant est lié à cette ligne - Window.size = (600, 700). Retirez-le et tout va fonctionner.

On dirait que changer Window.size casse en quelque sorte la détection du point de contact kivy. Si vous voulez changer la taille de la fenêtre sous Windows, use Config ou wrap Window.size en changeant avec platform check.

+0

Merci, j'ai édité le post, le widget 'Image' montre maintenant. Le problème restant est le widget 'Button' qui ne répond pas au téléphone. – Arief

+0

@Arief pouvez-vous fournir du code pour reproduire le problème? –

+0

J'ai édité le poste .. @MikhailGerasimov – Arief