Текст черепахи увеличивается на кажущуюся случайную величину, как это исправить?

#python #function #onclick #python-turtle

Вопрос:

Я довольно новичок в кодировании на python, поэтому я очень смущен. В настоящее время я работаю над игрой типа кликера для печенья. Вот код до сих пор.

 import turtle as t

#screen
wn = t.Screen()
wn.bgcolor("DarkSlateGray")
wn.setup(width=1366, height=768)

#clicks
clicks = 0

#square
sq = t.Turtle()
sq.speed(0)
sq.shape("square")
sq.color("coral2")
sq.shapesize(stretch_wid=5, stretch_len=5)
sq.penup()
sq.goto(0,0)

#pen
pen = t.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 270)
pen.write("Times clicked: 0", align="center", font=("Comic Sans MS", 24, "normal"))

#click function
def getclick(sq, clicks):
    clicks  = 1
    pen.clear()
    pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))

#click detection
wn.listen()
sq.onclick(getclick)
 

Функция «getclick» должна увеличить количество «кликов» на 1, а затем остальная часть функции записывает новое количество кликов. Однако, когда я тестирую этот код, число увеличивается не на 1, а на случайную величину где-то между -49,0 и 49,0. Например, я запущу программу, а затем щелкну черепаху, и число увеличится до -29,0, а затем снова до 34,0, но если я снова нажму на нее, она ничего не сделает.

Комментарии:

1. Вероятно, он рассматривает один клик как много кликов

Ответ №1:

Есть некоторые проблемы в использовании sq.onclick(getclick) . Из документации черепахи: Подпись turtle.onclick is

 turtle.onclick(fun, btn=1, add=None)
Parameters
fun – a function with two arguments which will be called with the
coordinates of the clicked point on the canvas
 

Таким образом, координаты x, y вашего клика передаются в вашу getclick функцию, и вы печатаете координаты y ваших кликов (примерно от -49,0 до 49,0). Параметр функции clicks также делает не то , что вы ожидаете: он просто затеняет глобальный clicks и не изменяет его.
Более правильной версией является:

 def getclick(x, y):
    global clicks
    clicks  = 1
    pen.clear()
    pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal'))