TypeError:click()接受0个参数(给定2个)

时间:2016-01-20 18:09:53

标签: python screen turtle-graphics

我正在尝试创建一个简单的点击式游戏。但最近我遇到了一些问题。在我之前的一个问题中,我问过如何解决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

创建此游戏

2 个答案:

答案 0 :(得分:1)

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

<强> From the documentation:

  

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

     

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

(强调我的)

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

在您的函数中添加两个参数以删除onclick,您可以自行决定使用这些参数。

TypeError

答案 1 :(得分:0)

引用official docs(强调我的):

  

class TestTableModelChoiceField(forms.ModelChoiceField): def label_from_instance(self, obj): # return the field you want to display return obj.display_field class TestForm(forms.ModelForm): type = TestTableModelChoiceField(queryset=Property.objects.all().order_by('desc1'))

     

参数:

     

turtle.onclick(fun, btn=1, add=None) - 一个功能   带有两个参数的将使用坐标调用   点击画布上的点

     

fun - 鼠标按钮的编号,默认值   到1(鼠标左键)

     

num - 对错 - 如果为True,则为新绑定   将被添加,否则它将取代以前的绑定Bind乐趣   在这只乌龟上鼠标点击事件。

你的函数接受0个参数,docs指定它应该接受两个参数。

将您的功能签名更改为:

add