键盘快捷键 "Takes 1 positional argument but 2 were given"

Keyboard Shortcut "Takes 1 positional argument but 2 were given"

正在尝试创建一个键盘快捷键来重置游戏。在 __init__ class 之前,我创建了一个菜单来开始新游戏,并使用 self.reset 重置 score/grid 等。 我现在一直在尝试使用相同的命令来实现快捷方式 - 重置是 class.

中的一种方法
self._master.bind_all('<Control-n>', self.reset)

这是错误:

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

我的困惑是,self.reset 在 __init__ 之前工作正常,但后来不适用于快捷方式?

我看不出快捷方式是如何为该方法提供任何位置参数的。

现在,如果我将其更改为 self.reset(),我会收到有关当前 class 缺少 _game 属性的错误消息。

重置方法如下:

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

这很简单 - 无论绑定快捷方式的机制如何,它都会向您的 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