我正在尝试用KivyMD
/Kivy
做一个应用程序,我想多次更改标签的文本,两次更改之间有几秒钟的时间间隔。我最初尝试用time.sleep()
来做这件事,但这完全冻结了图形用户界面,这使得标签发生了变化,这样就不起作用了。
我已经看到wxPython
有一个wx.CallLater()
函数(如果我没理解错的话),它会在一段时间内调用某个函数,而不会冻结图形用户界面。在this thread中,人们都在谈论线程,但它似乎在没有修复最初问题的情况下引发了另一个问题,所以我真的不确定这在我的情况下是否有效。
那么,线程是可行的吗?在Kivy
中有没有wx.CallLater()
的等价物,或者有没有其他更好的解决方案呢?
工作测试代码:
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()
发布于 2021-06-22 15:47:05
正如@John Anderson所建议的,来自kivy.clock
的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)
https://stackoverflow.com/questions/68057044
复制相似问题