我需要使用一些小部件来更新我的kivy屏幕,线程中的一个线程。除了要在屏幕上更新的小部件外,它完美地工作
<ViewScreen>:
id:grid
pic:pic
cols:2
spinner:spinner
MDSpinner:
active:False
class ViewScreen(Screen):
grid = ObjectProperty(None)
pic = ObjectProperty(None)
spinner = ObjectProperty(None)
def load_real(self):
_thread.start_new_thread(self.list_files, ('name',))
def list_files(self, name):
time.sleep(1)
self.ids.spinner.active = True
self.ids.grid.clear_widgets()
url = 'http://po.com/{}'.format(str(self.code_url[0]))
r = requests.get(url)
data = r.text
soup = BeautifulSoup(data)
for link in soup.find_all('a'):
if link.get('href').endswith('.png'):
print(link.get('href'))
self.passed.append(link.get('href'))
print(self.passed)
for photo in self.passed:
src = 'http://po.com/{}/{}'.format(self.code_url[0],photo)
print(src)
album = AsyncImage(source=src, )
self.ids.grid.add_widget(album)
self.spinner.active = False
self.code_url.pop(0)
print(self.code_url)
答案 0 :(得分:0)
Kivy不是线程安全的。如果你想触摸与小部件相关的任何东西,你必须从kivy的循环中调用它。线程应仅用于数据收集。
所以:
Clock.schedule_once(lambda dt: callback(data))
刷新GUI,其中callback
是窗口小部件操作函数,data
是要显示的收集数据。