[英]Screen isn't updated in kivy
所以這是帶有回溯(使用遞歸)的簡單數獨求解器。 每次遞歸后屏幕都會更新(以顯示更改),但在完全完成之前它不會顯示任何內容。 問題出在哪里? 另外,每次更改后也許有更好的方法來更新屏幕?
編碼:
'''
def update_numbers(self):
self.clear_widgets()
greeting = Label(text="Sudoku", pos=(self.width/2 - 70, 1200), size_hint=(0.2, 0.08))
self.add_widget(greeting)
v_x, v_y = 15, 955
for k, row in enumerate(board, start=1):
for k1, col in enumerate(row, start=1):
self.add_widget(Label(text=str(col), pos=(v_x, v_y), size_hint=(0.3, 0.3)))
v_x += 60
v_x = 15
v_y -= 60
def solve(self, bo):
self.update_numbers() # should update the screen
#everything further is solver itself
find = find_empty(bo)
if find:
row, col = find
else:
return True
for i in range(1, 10):
if valid(bo, (row, col), i):
bo[row][col] = i
if self.solve(bo):
return True
bo[row][col] = 0
return False
'''
如果您在主線程上運行solve()
(就像它由按鈕觸發一樣),則在solve()
方法返回之前無法更新顯示。 只能在主線程上更新顯示,並且只有在主線程可用時。
修復方法是在另一個線程中啟動solve()
進程(參見threading ),然后將 update_numbers update_numbers()
方法標記為mainthread
方法:
@mainthread
def update_numbers(self):
這會導致update_numbers()
方法在主線程上運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.