Как это сделать? Воспользоваться декоратором
mainthread, который поставит при вызове оригинальной функции поставит ее выполнение в следующий тик главного цикла приложения в главном потоке. Пример использования из Durak GUI. Метод
self.on_found_peer вызывается из другого вспомогательного потока, но он меняет интерфейс, поэтому должен быть снабжен декоратором mainthread:from kivy.clock import mainthread
class DurakFloatApp(App):
...
@mainthread
def on_found_peer(self, addr, peer_id):
print(f'Найден соперник {peer_id}@{addr}')
# делать что-то с GUI!
...
self.discovery = DiscoveryProtocol(self.my_pid, PORT_NO)
#
self.discovery.run_in_background(self.on_found_peer)