键盘快捷键"采用1个位置参数,但是给出了2个"

时间:2017-05-31 15:07:01

标签: python tkinter keyboard shortcut

尝试制作键盘快捷键以重置游戏。在__init__类的早期,我创建了一个菜单来启动一个新游戏,并使用self.reset重置分数/网格等。 我现在一直在尝试使用相同的命令来实现快捷方式 - 重置是类中的方法。

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())

1 个答案:

答案 0 :(得分:4)

这很简单 - 无论绑定快捷方式的机制如何,它都会向您的reset方法传递额外的参数。

因为你根本不关心它是什么,只需声明你的方法接受 一个额外的可选参数,你应该是好的:

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

因此,搜索“bind_all”我们发现你的代码实际上使用了tkinter,而你的方法中的tkinter传递的是“事件” - 一个对象,其中包含关键字whas实际按下的信息等等 - {{3} }