簡體   English   中英

kivy 中的屏幕未更新

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM