【问题标题】:How can I create a button in turtle?如何在乌龟中创建一个按钮?
【发布时间】:2020-01-24 19:49:38
【问题描述】:

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

【问题讨论】:

  • 将 Turtle 与 Tkinter 集成

标签: python button turtle-graphics


【解决方案1】:

您可以在 tkinter 中嵌入turtle,正如@JoshuaNixon 在他的评论中所建议的那样,使用 tkinter 按钮来控制您的海龟画布。如果你想在独立海龟中工作,我建议使用海龟作为按钮,因为它们可以被强制转换为任何形状和/或颜色,并且有单独的 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 不同 - 一种仅在单击特定海龟实例时发生,而另一种发生在单击屏幕上的任意位置时。

【讨论】:

  • 如果你想让它变得非常大,你会如何改变按钮的大小?我很确定在这段代码中,乌龟是按钮......如果我错了,请纠正我
  • @BobRobert,是的,乌龟按钮。查找海龟的shapesize() 方法,了解如何放大、缩小以及在某种程度上扭曲海龟。您还可以为海龟定义自己的多边形,制作您想要的任何形状或大小的按钮。
  • 好的,在您的方法中,移动按钮可能更容易创建不同的形状(多边形或预定义的形状),但在我的方法中,您几乎可以创建任何多边形、形状等。
【解决方案2】:

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

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

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

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

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

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

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

【讨论】:

  • 您的 print() 语句无效,因为您正在连接字符串和浮点数。请尝试print("Your coordinates are:", (x, y))。不需要您的 turtle.listen(),因为它用于键盘事件,而不是鼠标事件。 y &lt; 50 and y &gt; 100 什么时候是真的?最后,我看不到你的按钮来点击它。
  • 是的,您必须创建按钮轮廓或其他任何东西。我想你可以创建一个快速简单的函数来创建一个可以单击按钮的矩形,但它不会自动创建。我也修复了你提到的其他问题。
【解决方案3】:

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

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

应该是这样的!

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

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

【讨论】:

  • 或者你可以创建一个 tkinter 窗口并在其中添加一个海龟或其他东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多