почему мое приложение kivy просто закрывается сразу после загрузки? - PullRequest
0 голосов
/ 06 мая 2020

Мне нужна помощь, чтобы понять, почему мое приложение просто закрывается сразу после экрана предварительной sh. Оно хорошо работает на моей ma c OS X. В приложении есть компоненты из socket, json и apscheduler. Я поместил исходную папку apscheduler в папку приложения на том же уровне, что и main.py, а также добавил «apscheduler» в строку requirements :. это видно из моего файла spe c, который я включу. Я подозреваю, что это может быть связано с тем, что сокет не подключается к моей сети? Я могу выделить это на другой экран, чтобы сделать это вручную. Любая помощь очень ценится.

main.py

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.lang.builder import Builder
from kivy.properties import ObjectProperty, StringProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.graphics import Rectangle, Color
import socket
import json
import threading
from apscheduler.schedulers.background import BackgroundScheduler


class Screen_Manager(ScreenManager):
    screen_1 = ObjectProperty()

class Screen_1(Screen):
    main_display = ObjectProperty()

    def __init__(self, **kwargs):
        super(Screen_1, self).__init__(**kwargs)
        self.port = 55345

######----2nd thread--------------########
    th = threading.Thread(target=self.server_program)
    th.start()

#####--------start of socket--------------#######
    def server_program(self):
    # get the hostname
        self.host = socket.gethostname()
        self.ip_address = socket.gethostbyname(self.host)
        server_socket = socket.socket()  # get instance
        server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
        server_socket.bind((self.ip_address, self.port))

        server_socket.listen(2)
        conn, address = server_socket.accept()  # accept new connection

        b = b''
        while True:
            data = conn.recv(1024)
            if data:
                b += data
                self.utf_data = json.loads(data.decode('utf-8'))
                self.main_display.text = self.utf_data
            if not data:
                conn, address = server_socket.accept()  # accept new connection
        server_socket.close()

class MainApp(App):

    def build(self):
        self.title = "Number Display App"
        self.sm = Screen_Manager()
        return self.sm

if __name__=="__main__":
    MainApp().run()

main.kv

<Screen_Manager>:
    Screen_1:

<Screen_1>:
    id: screen_1
    name: "first"

    main_display: display_1


    Label:
        id: display_1
        text: ""
        font_size: "450sp"
        color: 1,0,1,1
        background_color: 0.1, 0.5, 0.6,

вот мой .spe c файл (по крайней мере, строки для требования:

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,ivy,apscheduler

inte rnet разрешение также включено.

# (list) Permissions
android.permissions = INTERNET

вот фотография, которая показывает, что я включил папку с файлами для apscheduler.

enter image description here

еще раз спасибо.

...