【问题标题】:TypeError: clicking() takes exactly 0 arguments (2 given)类型错误:click() 正好采用 0 个参数(给定 2 个)
【发布时间】:2016-01-20 18:09:52
【问题描述】:

我正在尝试创建一个简单的答题器风格游戏。但是最近我遇到了一些问题。在我之前的问题中,我问如何解决screen = getscreen() 错误。这个问题得到了回答,但同一天我又遇到了一个新错误。

当我尝试单击按钮时,我收到此回溯错误:

TypeError: clicking() takes exactly 0 arguments (2 given) at <unknown>`. 

它链接回clicking()的定义。

定义clicking()的部分代码:

def clicking():
  if distance( button.pos() ) < 2:
    BUTTON_CLICKS = BUTTON_CLICKS + 1

整个代码:

import time
import turtle

screen = turtle.Screen()
image_BUTTON = "Button.png"
image_BUTTON_CLICKS = "Button_clicks.png"
image_UPGRADEBG = "UPGRADEBG.png"

button = turtle.Turtle()
BUTTON_CLICKS = 0
BUTTON_CLICKS1 = turtle.Turtle()
BUTTON_CLICKS2 = turtle.Turtle()
upgrade = turtle.Turtle()
upgrade1 = turtle.Turtle()
upgrade2 = turtle.Turtle()
upgrade3 = turtle.Turtle()
upgrade4 = turtle.Turtle()
upgrade5 = turtle.Turtle()

screen.addshape(image_BUTTON)
button.penup()
button.speed(0)
button.left(90)
button.shape(image_BUTTON)
button.goto(0, 0)

BUTTON_CLICKS1.speed(0)
BUTTON_CLICKS1.penup()
BUTTON_CLICKS1.hideturtle()
BUTTON_CLICKS1.goto(-65, 170)
BUTTON_CLICKS1.write("Button   clicks: %d" % BUTTON_CLICKS, font=("Bebas", 14, "bold"))

upgrade.speed(0)
upgrade.penup()
upgrade.hideturtle()
upgrade.goto(110, -190)
upgrade.write("Upgrades", font=("Bebas", 13, "bold"))

def clicking():
  if distance( button.pos() ) < 2:
    BUTTON_CLICKS = BUTTON_CLICKS + 1

screen = turtle.getscreen()
screen.onclick( clicking )

注意:我在trinket.io创建这个游戏

【问题讨论】:

    标签: python screen turtle-graphics


    【解决方案1】:

    onclick 接受一个函数作为参数并使用另外两个参数调用它,即单击点的坐标。

    From the documentation:

    turtle.onclick(fun, btn=1, add=None)¶

    参数: fun - 一个带有两个参数的函数,将使用画布上单击点的坐标调用该函数

    (强调我的)

    因此,当您提供一个不接受任何参数的函数 (clicking()) 时,TypeError 将被引发,因为 onclick 将使用两个函数调用它论据。

    在你的函数中添加两个参数来删除TypeError,你如何处理这些,由你决定。

    def clicking(x, y):
      if distance( button.pos() ) < 2:
        BUTTON_CLICKS = BUTTON_CLICKS + 1
    

    【讨论】:

    • 哈,我不再收到那个错误了。但我得到了NameError: name 'distance' is not defined on line 41。 (抱歉这么笨)我显然错过了什么?
    • 你还没有定义distance,为什么要添加呢?
    • 我正在通过网络课程学习。我没有在示例中看到定义。所以我想我不需要一个。如何定义?
    • 嗯,它是一个函数(因为它被调用),你需要用def distance(button_position): # added logic 定义一个新函数来实现一些东西。我不知道那是什么东西,互联网课程应该提供它。
    • 感谢您的帮助,吉姆。我会努力寻找解决方案。
    【解决方案2】:

    引用official docs(强调我的):

    turtle.onclick(fun, btn=1, add=None)

    参数:

    fun – 一个函数 有两个参数,它们将被调用的坐标 画布上的点击点

    num – 鼠标按钮的编号,默认值 为 1(鼠标左键)

    add – True 或 False – 如果为 True,则为新绑定 将被添加,否则将替换以前的绑定 Bind fun to 此海龟的鼠标点击事件。

    您的函数接受 0 个参数,并且文档指定它应该只接受两个参数。

    将您的函数签名更改为:

    def clicking(x, y):
        pass  # your code goes here 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2016-01-22
      相关资源
      最近更新 更多