2017-05-31 176 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

相关问题