Kivy Простой многопоточный питон - PullRequest
0 голосов
/ 03 сентября 2018

Не уверен, что кто-нибудь может мне помочь с этим. Я не смог найти простой ответ на это нигде.

Я создаю графический интерфейс в Kivy, который показывает канал веб-камеры (с использованием openCV) и имеет две кнопки (кнопки A и B). Когда я нажимаю кнопку A, она вызывает функцию, которая что-то делает. Однако мой экран и графический интерфейс пользователя зависают при выполнении вызываемой функции.

Как реализовать функцию, вызываемую нажатием кнопки, для запуска в другом потоке в python?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

В вашем .kv файле вы можете сделать:

#:import threading threading
.
.
.
    Button:
        on_release: threading.Thread(target=root.do_something).start()

см. нить .

0 голосов
/ 03 сентября 2018

Если ваша кнопка вызывает функцию, выполнение которой требует времени, окно kivy останавливается до тех пор, пока функция не будет завершена. Вы можете использовать многопоточность и заставить поток выполнять эту функцию. У меня нет вашего кода, но например:

from threading import Thread

# the function that the button executes
def button_press():
    # create the thread to invoke other_func with arguments (2, 5)
    t = Thread(target=other_func, args=(2, 5))
    # set daemon to true so the thread dies when app is closed
    t.daemon = True
    # start the thread
    t.start()


def other_func(a, b):
    # your code here
...