Я пытаюсь получить gif загрузочного круга, пока я запускаю другой скрипт python.
Когда я нажимаю кнопку, я получаю всплывающее окно с загрузочным GIF, в фоновом режиме я хочу запустить скрипт python, пока этот GIF загружается. Как только скрипт завершится, всплывающее окно закрывается.
Пока все это работает, за исключением того, что gif зависает, как только запускается другой скрипт python.
Я пытался использовать os.system()
, subprocess.run()
и спорный subprocess.Popen()
. Я также пытался использовать многопроцессорные и многопроцессорные модули python.
Потоки, кажется, способ до go, но я все равно получаю тот же результат (gif-зависание, когда я запускаю другой python) скрипт).
Я знаю, что есть много других подобных вопросов, однако я могу заверить вас, что прочитал их все и попробовал их решения, но по какой-то причине они не работают для меня. Я работал над этим в течение нескольких дней и не могу найти решение, поэтому любая помощь будет принята с благодарностью.
Для общей картины я пишу python3 .7 приложение, использующее kivy для создания GUI , Я запускаю это приложение на Raspberry Pi 4.
Ниже приведены фрагменты моего текущего соответствующего кода: («...» указывает, где находится другой не относящийся к делу код)
main .py
class SetttingsWindow(Screen):
def __init__(self, **kwargs):
super(SettingsWindow, self).__init__(**kwargs)
Clock.schedule_interval(self.check, 1)
def check(self, dt):
global wset
if wset:
self.start_thread()
else:
pass
def start_thread(self):
t = threading.Thread(target=self.connect)
t.start()
time.sleep(1)
t.join()
def connect(self):
global wset
os.system('sudo python /home/pi/app/connect.py')
wset = False
loadingPopup.dissmiss()
def set(self):
Popup.open()
class PopUp(FloatLayout):
def __init__(self, **kwargs):
super(PopUp, self).__init__(**kwargs)
def change(self):
global wset
if ... :
PopUp.dismiss()
else:
...
PopUp.dissmiss()
wset = True
def setLoad(self):
loadingPopup.open()
class LoadingPopUp(FloatLayout):
pass
main.kv
<SettingsWindow>
...
Button:
text: "Setup"
on_release:
root.set()
...
...
<PopUp>
...
Button:
text: "Set"
on_release:
root.change()
root.setLoad()
...
...
<LoadingPopUp>
Image:
source: "loading.gif"
anim_delay: 0.05
keep_data: True