2017-05-31 3 views
1

Essayer de créer un raccourci clavier pour réinitialiser une partie. Plus tôt dans la classe __init__, je crée un menu pour démarrer une nouvelle partie, et j'utilise self.reset pour réinitialiser la partition/grille, etc. J'ai maintenant essayé d'implémenter le raccourci avec la même commande - la réinitialisation étant une méthode dans le classe.Raccourci clavier "Prend 1 argument positionnel mais 2 ont été donnés"

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

C'est l'erreur:

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

Ma confusion est que le self.reset fonctionne bien plus tôt dans la __init__ mais ne fonctionne pas pour le raccourci?

Je ne vois pas comment le raccourci donne même des arguments positionnels à la méthode.

Maintenant, si je le change en self.reset(), j'obtiens une erreur à propos de la classe actuelle qui manque l'attribut _game.

Voici la méthode de réinitialisation:

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

ne peut pas savoir ce qu'est 'self._master' à partir du code! Pouvez-vous dire quelle est cette –

Répondre

3

facile - quel que soit le mécanisme qui lie le raccourci ne, il passe un paramètre supplémentaire à votre méthode reset.

Puisque vous ne se soucient pas ce qu'il est du tout, simplement déclarer votre méthode pour accepter un paramètre optionnel supplémentaire, et vous devriez être bon:

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

Ainsi, la recherche de « bind_all » nous trouvons votre code utilise réellement tkinter, et ce que tkinter passe le long de votre méthode est "l'événement" - un objet avec des informations sur quelle touche a réellement été pressée et telle - http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

+1

Je pense que votre exemple serait mieux si vous avez changé 'extra' à' event'. Même s'il ne peut pas être utilisé, l'utilisation constante de 'event' dans chaque liaison rendra le code plus facile à comprendre. –

+0

(fait.Je l'avais repondu avant de le confirmer etait tkinter et le parametre supplementaire etait l '"evenement" - la question est repondable en termes de "pure Python") – jsbueno

+0

Merci pour la suggestion, et l'explication! J'ai eu le sentiment qu'il pouvait avoir lu le Ctrl + N comme un argument de quelque sorte, d'où la raison pour laquelle cela fonctionnait dans l'autre commande/__ init__. – user1381852