所以我正在嘗試構建一個tic tac腳趾的小遊戲,並且我正在使用kivy來實現它。我遇到的問題是我製作了9個按鈕(3x3)的網格,現在我正在綁定它們(或試圖)。在該類的__init __()方法中使用類的方法
我在我的課BoardGrid的__init__
方法中做了所有這些,因爲只有當程序第一次運行時纔會發生這種情況。
class BoardGrid(GridLayout):
def __init__(self, **kwargs):
super(BoardGrid, self).__init__(**kwargs)
self.board = []
self.buttons = []
for i in range(9):
self.board.append('')
self.buttons.append(Button(text=self.board[i]))
self.buttons[i].bind(on_press=BoardGrid.callback(????, i))
self.add_widget(self.buttons[i])
def callback(self, btn):
print(btn)
的問題是,on_press需要,它會直接給一個函數,如果我讓BoardGrid.callback沒有參數能正常工作,但因爲我希望它知道哪個按鈕被按下我想送在我。這導致了一個問題,我需要將BoardGrid傳遞到我在課堂中創建的回調函數中?
也許我在這裏從錯誤的角度來攻擊它,我想我可以將我的按鈕綁定到回調函數中的特定輸入,但這可能是不可能的。
如何獲得綁定工作有什麼意見,將不勝感激
編輯:似乎是現在的工作,對不起,我不能回覆大家,這是我的第一篇文章,我不能完全似乎明白了它還沒有。非常感謝回覆!
首先,你有一個'BoardGrid'實例,'self'。如果有任何實例是合適的,那可能就是那一個。其次,這個回調可能實際上並不需要成爲'BoardGrid'的一種方法。如果您對使用模塊級功能不那麼困惑,那就去做吧。第三,無論''...'中發生了什麼,'BoardGrid.callback(...)'都不是回調函數。這就是說要立即運行'BoardGrid.callback',而不是將它作爲回調傳遞。你需要'functools.partial'。 – user2357112
似乎您需要另一個類,例如Button,並在__init__中創建一個由9個按鈕組成的數組。 – Shiping
'self.buttons [i] .bind(on_press = lambda i = i:self.callback(i))''可以工作,但我現在無法測試它。 –