python - 相当于 Kivy/KivyMD 中的 `wx.CallLater()` 或者如何处理 `time.sleep()` 冻结 GUI?
问题描述
我正在尝试使用KivyMD
/制作一个应用程序Kivy
,并且我想多次更改标签的文本,更改之间有几秒钟的间隔。我最初尝试使用 来执行此操作time.sleep()
,但这完全冻结了 GUI,导致标签更改等不起作用。
我已经看到它wxPython
具有wx.CallLater()
(如果我理解正确的话)将在一段时间内调用某个函数而不会冻结 GUI 的函数。在这个线程中,人们在谈论线程,但它似乎在没有解决最初的问题的情况下引发了另一个问题,所以我真的不确定这是否适用于我的情况。
那么线程是要走的路,是否有等效的wx.CallLater()
in Kivy
,还是有另一种更好的解决方案来解决我的问题?
工作测试代码:
from kivymd.app import MDApp
from kivy.lang import Builder
import time
KV = '''
MDScreen:
MDFillRoundFlatIconButton:
id: button
icon: 'git'
on_release: app.some_func()
'''
class Test(MDApp):
def build(self):
return Builder.load_string(KV)
def some_func(self):
for i in range(3):
self.root.ids.button.text = str(3 - i)
time.sleep(3)
self.root.ids.button.text = 'Go'
Test().run()
解决方案
正如@John Anderson所建议的那样,Clock
来自的对象kivy.clock
具有与wx.CallLater()
.
from kivy.clock import Clock
# to schedule an event once:
Clock.schedule_once(lambda _: some_function(), in_x_seconds)
# to schedule an event repeatedly:
Clock.schedule_interval(lambda _: some_function(), every_x_seconds)
推荐阅读
- c# - 查询表的Linq扩展方法
- angular - 删除行后无法刷新 p-table 中的数据 ( PrimeNg )
- logstash - Filebeat 只收获一些 csv 文件
- python - 根据条件从其他数据框中添加列
- javascript - 如何防止 TypeError 空白未定义?
- go - 未找到 Go Web 服务器 404 页面
- django - Django AttributeError:'str'对象没有属性'get'
- android - MTP 连接/通过 USB 电缆传输需要 Wifi/移动数据?
- python - 如何在不同的图中绘制两个结果?
- reactjs - 从不同的文件扩展样式化组件