2017-05-31 21 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属性がない現在のクラスについてエラーが発生します。 - ショートカットをバインドするメカニズムがないものは何でも、それはあなたのresetメソッドに追加のパラメータを渡している

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

簡単です。ここで

がリセット方法です。

あなただけ 余分なオプションパラメータを受け入れるようにあなたの方法を宣言し、それがすべてであるか気にしない、とあなたは良いことがありますので:

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

だから、我々は見つける「bind_all」を検索あなたのコードは実際にはtkinterを使用しています。そして、あなたのメソッドに沿ったtkinterは、 "イベント" - 実際に押されたキーに関する情報を持つオブジェクトです -

+1

'extra'を' event'に変更すると、あなたの例がより良くなると思います。使用されないかもしれませんが、すべてのバインディングで一貫して 'event'を使用すると、コードがわかりやすくなります。 –

+0

(done。私は実際にそれを納得させる前にそれに答えていましたが、それはtkinterであり、余分なパラメータは "イベント"でした - 質問は "純粋なPython"の点で答えることができます) – jsbueno

+0

提案、 Ctrl + Nを何らかの引数として読んでいるかもしれないという気持ちがありました。それで、他の/ __ init__コマンドでなぜ機能したのでしょうか。 – user1381852

関連する問題