我在课堂上被分配了一个项目:
“创建5x5网格。允许用户单击两个之间的空格 点并在这两个点之间画线。为此,我是 从程序中寻找两个特征: 允许在点之间单击时稍微脱机,并且 单击可能存在的空间时处理歧义的能力 点之间的2个或更多间隔附近。”
所以我是一个初学者,并不真正知道执行此操作的有效方法,所以我只是使用每个点的坐标编写了一系列IF语句(我在该代码中仅包含4个)。我的问题是我无法弄清楚如何使Onclick正常工作,因为单击屏幕时什么也没发生。
对此有任何帮助或建议,我们将不胜感激!
import turtle
screen = turtle.Screen()
t = turtle.Turtle()
t.hideturtle()
t.speed(0)
def makeGrid():
def dotLine():
for i in range(5):
t.begin_fill()
t.fillcolor("black")
t.circle(4)
t.end_fill()
t.penup()
t.forward(50)
t.pendown
dotLine()
t.penup()
t.goto(0,0)
t.setheading(90)
t.forward(50)
t.setheading(0)
dotLine()
t.penup()
t.goto(0,0)
t.setheading(90)
t.forward(100)
t.setheading(0)
dotLine()
t.penup()
t.goto(0,0)
t.setheading(90)
t.forward(150)
t.setheading(0)
dotLine()
t.penup()
t.goto(0,0)
t.setheading(90)
t.forward(200)
t.setheading(0)
dotLine()
makeGrid()
ty = t.ycor()
tx = t.xcor()
t.goto(0,1)
#point 1
if screen.onclick == (ty == 0 and 0 < tx < 50):
t.pendown()
t.forward(50)
#point 2
if screen.onclick == (ty == 0 and 50 < tx < 100):
t.pendown()
t.forward(50)
#point 3
if screen.onclick == (ty == 0 and 100 < tx < 150):
t.pendown()
t.forward(50)
#point 4
if screen.onclick == (ty == 0 and 150 < tx < 200):
t.pendown()
t.forward(50)
答案 0 :(得分:1)
screen.onclick()
方法不能这样工作:
if screen.onclick == (ty == 0 and 0 < tx < 50):
您有关于乌龟的任何文档吗? onclick()
方法采用一个函数的名称,该函数的名称在发生单击时调用,但不返回任何内容。另外,您的turtle.pendown()
通话之一缺少括号。
最后,用户无法准确点击以下内容:
if screen.onclick == (ty == 0 and ...):
准确达到0的几率非常低。我对下面的代码进行了重新整理以使其运行。显然,您需要激活更多的点:
from turtle import Screen, Turtle, mainloop
def dotLine():
for _ in range(5):
t.fillcolor("black")
t.begin_fill()
t.circle(4)
t.end_fill()
t.penup()
t.forward(50)
t.pendown()
def makeGrid():
dotLine()
t.penup()
t.home()
t.setheading(90)
t.forward(50)
t.setheading(0)
dotLine()
t.penup()
t.home()
t.setheading(90)
t.forward(100)
t.setheading(0)
dotLine()
t.penup()
t.home()
t.setheading(90)
t.forward(150)
t.setheading(0)
dotLine()
t.penup()
t.home()
t.setheading(90)
t.forward(200)
t.setheading(0)
dotLine()
def onclick_handler(x, y):
t.penup()
# point 1
if 0 < x < 50 and 0 < y < 50:
t.goto(0, 0)
t.pendown()
t.forward(50)
# point 2
elif 50 < x < 100 and 0 < y < 50:
t.goto(50, 0)
t.pendown()
t.forward(50)
# point 3
elif 100 < x < 150 and 0 < y < 50:
t.goto(100, 0)
t.pendown()
t.forward(50)
# point 4
elif 150 < x < 200 and 0 < y < 50:
t.goto(150, 0)
t.pendown()
t.forward(50)
# point 5
elif 200 < x < 250 and 0 < y < 50:
t.goto(200, 0)
t.pendown()
t.forward(50)
screen = Screen()
t = Turtle(visible=False)
t.speed('fastest')
makeGrid()
screen.onclick(onclick_handler)
t.showturtle()
mainloop()
如果用户单击的点数超出了程序中当前包含的点数,那么我将采用另一种方法。我将每个点变成自己的乌龟,然后让屏幕的onclick()
事件处理程序使用turtle.distance()
方法询问所有乌龟,以找到最接近单击点的两只乌龟。然后,您无需进行任何解码数学运算,因为海龟会处理它。