如何在 Python 中正确编写 .onclick()?
How to properly write an .onclick() in Python?
我正在尝试创建一个每次单击按钮时都会更新的计数器。 (这是我的第一个solo程序。)我写的.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
的“按钮”,因为您正在更改 [= 的值20=] 在定义中。如果您有任何问题,请提问!
我同意@JonathanDrukker 的观点,两个关键问题是您滥用了 tracer()
和 update()
,这在该程序中甚至不需要,以及缺少的 global
声明written
。然而,他关于 listen()
的最初问题是转移注意力,因为它只适用于击键,而不适用于鼠标点击。 mainloop()
的必要性取决于您的 Python 环境。
我会选择一个更简单的实现,因为向居中字符串添加空格几乎没有价值,并且 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()
但是,这个程序,就像您的原始示例和 Jonathan 的示例一样,是脆弱的,因为它在海龟可见的同一位置写入。如果海龟在顶部,对代码稍作更改可能会导致它停止工作。我会把笔移到 (100, 100)
这样的地方,这样它就不会在另一只乌龟的中间。
我正在尝试创建一个每次单击按钮时都会更新的计数器。 (这是我的第一个solo程序。)我写的.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
的“按钮”,因为您正在更改 [= 的值20=] 在定义中。如果您有任何问题,请提问!
我同意@JonathanDrukker 的观点,两个关键问题是您滥用了 tracer()
和 update()
,这在该程序中甚至不需要,以及缺少的 global
声明written
。然而,他关于 listen()
的最初问题是转移注意力,因为它只适用于击键,而不适用于鼠标点击。 mainloop()
的必要性取决于您的 Python 环境。
我会选择一个更简单的实现,因为向居中字符串添加空格几乎没有价值,并且 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()
但是,这个程序,就像您的原始示例和 Jonathan 的示例一样,是脆弱的,因为它在海龟可见的同一位置写入。如果海龟在顶部,对代码稍作更改可能会导致它停止工作。我会把笔移到 (100, 100)
这样的地方,这样它就不会在另一只乌龟的中间。