2017-05-31 175 views
1

試圖製作鍵盤快捷鍵來重置遊戲。在__init__類中,我創建了一個菜單來開始一個新遊戲,並使用self.reset來重置分數/網格等。 我現在一直試圖用相同的命令實現快捷方式 - 復位是類。鍵盤快捷鍵「需要1個位置參數,但有2個被給出」

self._master.bind_all('<Control-n>', self.reset) 

這是錯誤:

TypeError: reset() takes 1 positional argument but 2 were given 

我的困惑是,self.reset工作正常早些時候__init__但隨後的快捷方式不起作用?

我不明白快捷方式是如何給該方法提供任何位置參數的。

現在,如果我將其更改爲self.reset(),我得到一個有關當前類缺少_game屬性的錯誤。

下面是復位方法:

def reset(self): 
    self._game.get_default_score() 
    self._game.reset() 
    self._grid_view.draw(self._game.grid, self._game.find_connections()) 
+0

無法確定什麼是「self._master」來自代碼!你能告訴那是什麼 –

回答

3

這是很容易 - 不管它結合快捷的機制沒有,它是通過一個額外的參數你reset方法。

既然你不關心它是什麼可言,只是聲明你的方法接受 一個額外的可選參數,你應該是好:

... 
def reset(self, event=None): 
    self._game.get_default_score() 
    ... 

所以,搜索「bind_all」我們發現你的代碼實際上使用tkinter,並且你的方法過程中的tkinter是「event」 - 一個包含關於哪些按鍵實際上按下的信息的對象 - http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

+1

我認爲你的例子會更好,如果你把'extra'改成'event'。儘管可能不會使用它,但在每個綁定中始終使用'event'會使代碼更易於理解。 –

+0

(done。我實際上已經回答了它,然後纔將它定義爲tkinter,而額外的參數是「事件」 - 問題是用「純Python」來回答) – jsbueno

+0

感謝您的建議和解釋!我有一種感覺,它可能已經將Ctrl + N作爲某種參數讀取,因此它在其他/ __ init__命令中起作用。 – user1381852

相關問題