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

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

最佳答案

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

既然你根本不关心它是什么,就声明你的方法接受 一个额外的可选参数,你应该很好:

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

因此,搜索“bind_all”,我们发现您的代码实际上使用了 tkinter,而 tkinter 传递给您的方法的是“事件”——一个包含实际按下的键等信息的对象 - http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

关于python - 键盘快捷键 "Takes 1 positional argument but 2 were given",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288364/

相关文章:

python - numpy字节到纯字符串

matplotlib - tkinter 与 matplotlib

python - 如何使 python tkinter 匹配按钮到操作系统

Java对象移动

c++ - 简单的 'keypress' 程序

python - 如何在 Python3 中进行 ROT13 编码?

android - pyOpenSSL 的 PKCS7 对象提供的信息非常少,如何在签名中获取公钥的 sha1 摘要

python - Django 模板继承不提供 css?

python - start_command()缺少1个位置参数?

iphone - 如何向 iOS 应用程序添加蓝牙键盘支持?