我一直坚持在这个相同的问题上短短一周现在: 程序应该添加基于http请求的小部件。但是,该请求可能需要一些时间,具体取决于用户的互联网连接,所以我决定对该请求进行线索处理,并添加一个微调器以指示正在进行的操作。Kivy:从另一个线程添加小部件
这就是问题所在。某段代码:
@mainthread
def add_w(self, parent, widget):
parent.add_widget(widget)
def add_course():
# HTTP Request I mentioned
course = course_manager.get_course(textfield_text)
courses_stack_layout = constructor_screen.ids.added_courses_stack_layout
course_information_widget = CourseInformation(coursename_label=course.name)
self.add_w(courses_stack_layout, course_information_widget)
constructor_screen.ids.spinner.active = False
add_course从线程被调用,并且spinner.active在调用此函数前被设置为True。结果如下:有时候:messed up graphical interface
我也尝试用clock.schedule_once和clock.schedule_interval来解决这个问题。结果是一样的。有时它起作用,有时它不起作用。微调员在获得请求时会旋转,这非常棒。
非常坦率地说,我从来没有想过,实施微调将是如此艰难。
有关如何实现微调的任何提示?也许是线程的另一种选择?也许urllib提出另一种选择来提出请求?
谢谢!
编辑:关于我应该如何发布此信息的任何反馈,以便我可以获得更多帮助?太长了?也许我可以更清楚了?
如果在主线程中进行所有操作,即'active = False',会发生什么? – syntonym
可能值得查看kivy urlrequest模块https://kivy.org/docs/api-kivy.network.urlrequest.html – PalimPalim
@syntonym不幸的是,无法看到微调旋转。 active = True - > HTTP请求冻结GUI - > active = False –