gpt4 book ai didi

python - 如何在运行命令时使用加载 gif

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:47 25 4
gpt4 key购买 nike

我试图在运行另一个 python 脚本时获取一个加载圆圈的 gif 来播放。

当我点击一个按钮时,我会看到一个弹出窗口,其中有一个正在加载的 gif,我想在加载该 gif 时在后台运行一个 python 脚本。脚本完成后,弹出窗口将关闭。

到目前为止,除了 gif 在其他 python 脚本开始运行后卡住之外,所有这些都有效。

我尝试过使用os.system()subprocess.run()和有争议的subprocess.Popen()。我还尝试过使用线程和多处理 python 模块。

线程似乎是可行的方法,但我仍然得到相同的结果(一旦我开始运行其他 python 脚本,gif 就会卡住)。

我知道还有很多其他类似的问题,但是我可以向您保证我已经阅读了所有这些问题并尝试了他们的解决方案,但由于某种原因它们对我不起作用。我已经为此工作了好几天,但找不到解决方案,因此我们将不胜感激。

对于整体情况,我正在使用 kivy 编写一个 python3.7 应用程序来创建 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

最佳答案

您的 check() 方法将在主线程中运行(由 Clock.schedule_interval 调用)。该方法调用 start_thread,它启动一个新线程来运行您的 connect 方法。一切都很好,但随后您调用 t.join(),这会停止主线程,直到您的 connect 方法完成。在等待 connect 线程完成时,您的 GUI 将完全停止。我建议删除这些行:

    time.sleep(1)
t.join()

允许 GUI 运行。

关于python - 如何在运行命令时使用加载 gif,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60438648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com