首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应用程序在Python2 & Python3中运行良好,但是接收错误:导入android失败,按钮没有响应

应用程序在Python2 & Python3中运行良好,但是接收错误:导入android失败,按钮没有响应
EN

Stack Overflow用户
提问于 2017-10-10 11:06:16
回答 1查看 158关注 0票数 1

这是一个用python 2.7编写的应用程序,使用kivynumpy模块。我在这个链接中通过以下步骤安装了buildozerhttps://github.com/kivy/buildozer,我没有做sudo pip install https://github.com/kivy/buildozer/archive/master.zip。在android buildozer android deploy run logcat上部署应用程序之后,我在日志中看到了一些错误:

代码语言:javascript
运行
复制
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小部件仍然没有响应于安卓,但在Button上工作得很好。

测试“开始”和“后退”按钮的代码:

这是main.kv

代码语言:javascript
运行
复制
#: import Main main    
<CtmButton@Button>:
    font_size:30
    size:100, 50
<BackButton@Button>:
    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

代码语言:javascript
运行
复制
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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-11 05:18:18

未能导入"android“模块。

这个信息与图像无关。如果不显式地使用android模块,它不会影响您的项目。要避免日志中的这一行,所需要做的就是将android添加到buildozer.spec中的需求中。

错误读取文件.\logo_example1.png

此错误表示找不到图像。我不知道.\\logo_example1.png有什么问题,但最好使用绝对路径,而忘记问题。

代码语言:javascript
运行
复制
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,某种程度上破坏了奇维接触点的检测。如果要更改Windows上的窗口大小,请使用使用 Config或want Window.size更改站台检查

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46665200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档