如何在 Python 中正确编写 .onclick()?

问题描述

我正在尝试创建一个每次单击按钮时都会更新的计数器。 (这是我的第一个单独程序。)我写的 .onclick() 函数似乎有问题,我不确定是什么问题。

这是我的代码供参考。 . .

感谢您的帮助。

import turtle

wn = turtle.Screen()
wn.title("Button Counting")
wn.bgcolor("red")
wn.setup(width=800,height=600)
wn.tracer(0)

written = 0

def click(x,y):
    wn.update()
    x = 0
    y = 0
    written += 1
    pen.clear()
    pen.write(" {} ".format(written),align="center")

button = turtle.Turtle()
button.penup()
button.color("white")
button.shape("square")
button.shapesize(stretch_wid=5,stretch_len=5)
button.onclick(click)

pen = turtle.Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0,0)
pen.write(" 0 ")

解决方法

解释在下面。 这是一种解决方案:

import turtle

written=0

wn=turtle.Screen()
wn.title("Button Counting")
wn.bgcolor("red")
wn.setup(width=800,height=800)

button=turtle.Turtle()
button.penup()
button.color("white")
button.shape("square")
button.shapesize(stretch_wid=5,stretch_len=5)

pen = turtle.Turtle()
pen.speed(0)
pen.color("black")
pen.penup()
pen.hideturtle()
pen.goto(0,0)
pen.write(" 0 ")

def click(x,y):
    global written
    wn.update()
    written += 1
    x=0
    y=0
    pen.clear()
    pen.write(" {} ".format(written),align="center")

turtle.listen()
button.onclick(click)
turtle.mainloop()

当使用 turtle.onkey/turtle.onclick 等时,您需要通过执行 turtle.listen() 使海龟先听,然后添加 button.onclick(click) 然后 turtle.mainloop() 因为如果您不要添加它,程序会立即停止。 我所做的更改是删除wd.tracer(0),因为它会隐藏添加 turtle.listen() button.onclick(click) turtle.mainloop() 并将 global written 添加到定义 click 的“按钮”,因为您正在更改 {{ 1}} 在定义中。如果您有任何问题,请提出!

,

我同意@JonathanDrukker 的观点,两个关键问题是您对 tracer()update() 的滥用,这在本程序中甚至不需要,以及 {{} 缺少 global 声明1}}。然而,他关于 written 的最初问题是一个红鲱鱼,因为它只适用于击键,而不适用于鼠标点击。 listen() 的必要性取决于您的 Python 环境。

我会采用更简单的实现,因为向居中的字符串添加空格几乎没有什么价值,而 mainloop() 在这种情况下没有实际用处:

speed()

然而,这个程序,就像你原来的和乔纳森的例子一样,是脆弱的,因为它写在海龟可见的同一个地方。如果乌龟在上面,对代码的轻微更改可能会导致它停止工作。我会把笔移到像 from turtle import Screen,Turtle written = 0 def click(x,y): global written written += 1 pen.clear() pen.write(written,align='center') screen = Screen() screen.setup(width=800,height=600) screen.title("Button Counting") screen.bgcolor('red') button = Turtle() button.shape('square') button.shapesize(5) button.color('white') button.onclick(click) pen = Turtle() pen.hideturtle() pen.write(written,align='center') screen.mainloop() 这样的地方,这样它就不会在另一只乌龟的中间。