我一直堅持在這個相同的問題上短短一週現在: 程序應該添加基於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 –