如何在乌龟中创建按钮?

How can I create a button in turtle?

如何在 turtle 中创建一个简单的按钮,python,如果您点击它,您可以定义它来打印消息,或做其他更复杂的事情。

要创建一个简单的按钮,可能还有其他方法,但我就是这样做的。

import turtle
def button(x,y):
    if x < 50 and x > -50 and y < 50 and y > -50:
        print(f"Your coordinates are: ({x}, {y}).")
turtle.onscreenclick(button, 1, add=False)
turtle.done()

解释一下,按钮只是一个功能,它与实际按钮无关。那里的 if 语句基本上采用作为其参数的 x,y 变量,并检查它们是否在两个数字之间,在本例中为坐标。

onscreenclick 函数采用三个参数。第一个是带有两个参数的函数。无论您在何处单击 turtle 弹出窗口,它都会获取您单击位置的 x,y 坐标并将其插入到函数中。第二个是数字。这个数字指的是您将如何单击它(例如,右键单击、左键单击等)。在大多数情况下,它是 1,因为 1 是左键单击。最后,当您有多个按钮时,第三个参数是必需的。如果你正在创建第二个、第三个等按钮,并且你想创建新按钮而不覆盖前一个按钮,你可以写 add=True。如果你想让它取消所有以前的按钮,你写 True。所以,最后,如果它们都在 -50 和 50 之间,上面的代码将打印您点击位置的坐标。

您可以使用此功能做很多有用的事情。您可以将其创建为一个临时按钮,以在使用 turtle 书写时为您提供帮助,其中“整个屏幕”是一个大按钮,它会打印您单击位置的 x、y 坐标。这对于获取您希望乌龟下一步去向的大致坐标很有用。

或者您可以在实际代码中使用它,从用户那里获取信息或作为游戏的一部分。

总而言之,这是一种仅使用turtle而不需要其他模块来创建按钮的简单方法,具有很大的灵活性。

如果有任何其他方法,使用或不使用turtle,复杂或简单,请post在下面作为答案。

注意:默认情况下您将无法“看到”该按钮。不过,如果你愿意,你可以让乌龟画出按钮或其他东西的轮廓。

您可以在 tkinter 中嵌入 turtle,正如@JoshuaNixon 在他的评论中建议的那样,使用 tkinter 按钮来控制您的 turtle canvas。如果你想在 standalone turtle 中工作,我建议使用 turtle 作为按钮,因为它们可以被强制转换成任何形状 and/or 颜色并且有单独的 onclick 事件处理程序,因此您不必弄清楚用户在屏幕上单击的位置:

from turtle import Screen, Turtle

CURSOR_SIZE = 20
FONT_SIZE = 12
FONT = ('Arial', FONT_SIZE, 'bold')

def draw_onclick(x, y):
    turtle.dot(100, 'cyan')

button = Turtle()
button.hideturtle()
button.shape('circle')
button.fillcolor('red')
button.penup()
button.goto(150, 150)
button.write("Click me!", align='center', font=FONT)
button.sety(150 + CURSOR_SIZE + FONT_SIZE)
button.onclick(draw_onclick)
button.showturtle()

turtle = Turtle()
turtle.hideturtle()

screen = Screen()
screen.mainloop()

请注意 Turtle.onclick()Screen().onclick 不同——前者仅在单击特定海龟实例时发生,而后者在单击屏幕上的任意位置时发生。

我还没有尝试过,但这可能有效:

root = turtle.Screen()._root
btn = Button(root, text="This button exists in turtle")
btn.pack()

应该就是了!

注意:由于 turtle 基于 tkinter,因此 turtle.Screen() 包含 tk() 根 我们能够访问该根并创建一个 tkinter 按钮并将其添加到其中。

编辑:如果你在包中添加一个命令参数,你可以让按钮执行一个功能