问题描述
我正在尝试创建一个每次单击按钮时都会更新的计数器。 (这是我的第一个单独程序。)我写的 .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()
这样的地方,这样它就不会在另一只乌龟的中间。