24
Сен
2020

Вылетает приложение kivy

Я успешно собрал apk на buildozer, но после запуска на телефоне показывается загрузка kivy, и после этого оно вылетает. Вскоре я собрал apk с кодом из туториала по документации kivy (pong game) и оно отлично заработало. После того как я добавил в приложение модуль socketio (который также был в первом) приложение снова вылетело. В spec файле в requirements также присутсвуют все необходимые модули. Подозреваю, что ошибка в том, что socketio не поддерживается python-for-android.

Обновление

Ошибка не в socketio, а в моем коде

Хоть я и запускал код на Pydroid приложение не работает

from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ListProperty, StringProperty

from kivymd.app import MDApp
from kivymd.uix.label import MDLabel
from kivy.core.window import Window
from kivy.uix.label import Label
from kivy.core.text.markup import MarkupLabel
from kivy.properties import ObjectProperty
from kivy.clock import Clock

import socketio

sio = socketio.Client()


Window.keyboard_anim_args = {'d': .2, 't': 'in_out_expo'}
Window.softinput_mode = "below_target"


KV = '''
Screen:
    id: major_screen

    

    NavigationLayout:  
        x: toolbar.height 
   
        ScreenManager:
            id: screen_manager

            Screen:
                name: 'menu'

                MDToolbar:
                    title: "Toolbar"
                    pos_hint: {"top": 1}
                    id: toolbar
                    height: "50dp"
                    elevation: 0
                    right_action_items: [["close", lambda x: app.on_request_close()]]


                BoxLayout:
                    orientation: "vertical"
                    spacing: "10dp"

                    AnchorLayout:
                        anchor_x: 'center'
                        anchor_y: 'bottom'

                        MDTextField:
                            id: name
                            hint_text: "Введите сообщение"
                            size_hint: [.75, None]
                            mode: "rectangle"
                            height: "50dp"

                    AnchorLayout:
                        anchor_x: 'center'
                        anchor_y: 'top'

                        MDRectangleFlatButton:
                            id: enter_btn
                            text: "Войти"
                            height: "50dp"
                            size_hint: [.8, None]
                            on_press: app.enter_chat()
                    

            Screen:
                id: screen
                name: 's2'

                MDNavigationDrawer:
                    id: nav_drawer
                    height: "1dp"
                    scrim_color: [0, 0, 0, 0.0]
                    elevation: 0

                BoxLayout:
                    id: box
                    orientation: "vertical"
                    spacing: "10dp"

                    MDToolbar:
                        title: "Toolbar"
                        elevation: 0
                        height: "50dp"
                        right_action_items: [["close", lambda x: app.on_request_close()]]
                        left_action_items: [["menu", lambda x: nav_drawer.set_state('toggle')]]





                    MDScrollViewRefreshLayout:
                        id: scroll
                        refresh_callback: app.refresh_callback
                        root_layout: box
                        on_touch_up: pass

                        BoxLayout:
                            id: messages
                            orientation: "vertical"
                            spacing: "10dp"
                            size_hint_y: None
                            height: self.minimum_height


                        
                    BoxLayout:
                        size_hint: [1, .1]
                        padding: "10dp"
                        spacing: "10dp"

                        FloatLayout:

                            MDTextField:
                                id: text_field
                                hint_text: "Введите сообщение"
                                size_hint: [.775, None]
                                pos_hint: {"x": 0.05, "y": 0.05}
                                mode: "rectangle"

                            MDIconButton:
                                id: send_button
                                icon: "send"
                                text_color: 0, 0, 1, 1
                                md_bg_color: 0.1, 0.5, 1, 1
                                font_size: "25dp"
                                on_press: app.send()
                                pos_hint: {"x": .875, "y": 0.025}

        MDNavigationDrawer:
            id: nav_drawer
            scrim_color: [0, 0, 0, 0.0]
            elevation: 0

            ContentNavigationDrawer:
                id: drawerContent
                
                




<MyLabel>:
    text: '[b][color=3f00a3]'+root.author+'[/color][/b]'+root.message_text
    size_hint: [.8, None]
    padding: [10, 10]
    pos_hint:{'center_x': 0.45}
    height: self.texture_size[1]
    markup: True
    canvas.before:
        Color:
            rgb: 0.44, 0.63, 1
        RoundedRectangle:
            size: self.size
            pos: self.pos
            radius: 10, 10, 10, 0
'''


class MyLabel(MDLabel):
    author = StringProperty()
    message_text = StringProperty()


class Online(MDLabel):
    pass

class ContentNavigationDrawer(BoxLayout):
    pass


class Screen2(Screen):
    pass




class Test(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Window.bind(on_request_close=self.on_request_close)
        self.major_screen = Builder.load_string(KV)

    def build(self):        
        return self.major_screen

    def send(self):
        global name
        if self.major_screen.ids.text_field.text != '':
            sio.emit('message', {'data': self.major_screen.ids.text_field.text, 'user': name})
        self.major_screen.ids.text_field.text = ''

    def refresh_callback(self):
        def refresh_callback(interval):
            self.major_screen.ids.scroll.refresh_done()

    def on_request_close(self, *args):
        sio.disconnect()
        quit()
        return True

    def all_msg(self, data):
        for i in data:
            self.major_screen.ids['messages'].add_widget(MyLabel(author=i[0], message_text='\n'+i[1]))

    def new_message(self, message_text=''):
        self.major_screen.ids['messages'].add_widget(MyLabel(author=message_text["user"]+'\n', message_text=message_text["data"]))

    def set_screen(self, manager, nav_drawer, name_screen):
        manager.current = name_screen
        nav_drawer.set_state("toggle")

    def enter_chat(self):
        global name
        try:
            sio.connect('heroku_server')
            sio.emit('connect_user', {'data': 'ok'})
            name = self.major_screen.ids.name.text
            self.major_screen.ids.nav_drawer.set_state('toggle')
            Clock.schedule_once(lambda x: app.set_screen(self.major_screen.ids.screen_manager, self.major_screen.ids.nav_drawer, "s2"), .3)
        except Exception as e:
            self.major_screen.ids.enter_btn.text = "Попробовать снова"
            



    



@sio.on('new_message')
def my_message(data):
    app.new_message(message_text=data)

@sio.on('connect_user')
def oisado(data):
    app.all_msg(data)

@sio.event
def disconnect():
    sio.emit('disconnect_user', {'data': 'user_name'})



app = Test()

app.run()
quit()```

Источник: https://ru.stackoverflow.com/questions/1182051/%D0%92%D1%8B%D0%BB%D0%B5%D1%82%D0%B0%D0%B5%D1%82-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-kivy

Тебе может это понравится...

Добавить комментарий