应用程序在Python2和Python3的Windows上运行良好,但接收错误:无法导入android,并且按钮无响应
这是使用kivy
和numpy
模块在python 2.7
中编写的应用程序。按照以下步骤安装buildozer
:https://github.com/kivy/buildozer,我没有做sudo pip install https://github.com/kivy/buildozer/archive/master.zip
。在Android buildozer android deploy run logcat
部署应用程序后,我看到了日志一些错误:应用程序在Python2和Python3的Windows上运行良好,但接收错误:无法导入android,并且按钮无响应
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.
问题:Image
小部件不显示,而touch
的按钮似乎并没有收到任何事件/响应。我可以对此反馈意见,谢谢。
当前部分解决:的Image
小部件现在显示,我改变了源地址从.\\logo_example1.png
到logo_example1.png
。
现有问题:Button
小部件仍然无法响应android上的触摸,但在Windows上正常工作。
代码来测试开始和后退按钮:
这是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()
这是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();
无法导入 “机器人”模块。
此msg与图像无关。如果您不明确使用android
模块,它不会影响您的项目。您需要在日志中避免此行的所需操作是在buildozer.spec
内添加android
。
读取文件错误。\ logo_example1.png
此错误表示图像不能被发现。我不知道.\\logo_example1.png
有什么问题,但最好是使用绝对路径并忘记问题。
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:
问题的紧迫的是与此相关的线 - Window.size = (600, 700)
。删除它,一切都会工作。
看起来像改变Window.size
以某种方式打破了kivy接触点检测。如果您想在Windows上更改窗口大小,use配置或换行Window.size
更改为platform check。
您可能需要在buildozer.spec中添加'android'到您的需求。 – Tshirtman
@Tshirtman请问为什么..?我认为官方步骤将足够紧凑.. – Arief
@Tshirtman我试过了,而且按钮仍然没有收到任何回应。 – Arief