Как запустить другой python отдельно внутри программы kivy

#python-3.x #kivy

Вопрос:

Перейдя с Arduino на python, я привык ко всему, что более или менее работает в цикле.

Я пытаюсь понять, как python взаимодействует с kivy.

Я понимаю, что для того, чтобы сегмент кода выполнялся снова и снова, мне нужен, например, оператор while. Однако, если я использую код, который зацикливается до того, как он попадет в код kivy, он никогда не попадет в код kivy. Но если я сделаю цикл после кода kivy, он не запустится, пока я не закрою программу.

У меня есть google, и я вижу примеры простых проектов проектов python/kivy, в которых весь код относится к логике клея пользовательского интерфейса, чтобы он действительно что-то делал. Но я не видел ничего, что показывало бы код python, работающий независимо от проекта kivy.

Другими словами, если бы я сделал проект в Arduino, у меня был бы основной цикл, и я мог бы вызывать функции, а затем возвращаться из них. Однако я не понимаю, как лучше всего сделать это с помощью kivy/python.

Пример кода, который я опубликовал ниже, не является циклом, однако я ожидал бы, что он выполнит все за один раз. Но он запустит первые инструкции печати, а затем, когда я закрою приложение, будет запущена последняя инструкция печати.

Я понимаю, что циклы не рекомендуются при объектно-ориентированном программировании, это всего лишь простой пример в качестве ссылки на то, к чему я привык.

Для тех, кто скажет, что я не понимаю, о чем вы спрашиваете и что вы пытаетесь сделать или спросить?

Я пытаюсь спросить, куда мне поместить код python, который не относится непосредственно к коду киви, но должен выполняться циклами или чем-то еще, пока работает киви. Чтобы я мог сделать так, чтобы все происходило на стороне питона, не блокируя киви.

Для этого потребуется несколько программ на python? И оставьте программу kivy саму по себе, почти как файл .kv.

Или доза его требует, чтобы все было поставлено на занятия?

Спасибо за любые разъяснения, передовую практику или примеры.

 from kivy.app import App

from kivy.uix.button import Button

print("test")

class FirstKivy(App):

    def build(self):
        return Button(text="Test text")

print("test2")

FirstKivy().run()

print("test3")
 
 

Комментарии:

1. Линия FirstKivy().run() проходит по App основной петле киви. и не возвращается до тех пор, пока этот цикл App не завершится (выходы). Kivy основан на событиях, поэтому почти все в Kivy App запускается в результате какого-либо события. Если вы пытаетесь запустить код, который выполняется долго (например, другой цикл), вам нужно использовать другой Thread или другой Process см. Параллелизм .

Ответ №1:

Вам нужно будет добавить многопоточность в свой код

 
from kivy.app import App

from kivy.uix.button import Button

import threading

print("test")

class FirstKivy(App):

    def build(self):
        return Button(text="Test text")

print("test2")

def run():
    FirstKivy().run()

def print_stuff(): 
    print("test3")

kivy_thread = threading.Thread(target=run)
print_thread = threading.Thread(target=print_stuff)

kivy_thread.start()
print_thread.start()