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();
vous devrez peut-être ajouter 'android' à vos besoins dans buildozer.spec. – Tshirtman
@Tshirtman puis-je demander pourquoi ..? Je pensais que les étapes officielles seraient assez compactes. – Arief
@Tshirtman Je l'ai essayé, et le bouton ne reçoit toujours aucune réponse. – Arief