【发布时间】:2020-01-24 19:49:38
【问题描述】:
如何在turtle,python中创建一个简单的按钮,如果你点击它,你可以定义它来打印消息,或者做其他更复杂的事情。
【问题讨论】:
-
将 Turtle 与 Tkinter 集成
标签: python button turtle-graphics
如何在turtle,python中创建一个简单的按钮,如果你点击它,你可以定义它来打印消息,或者做其他更复杂的事情。
【问题讨论】:
标签: python button turtle-graphics
您可以在 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 不同 - 一种仅在单击特定海龟实例时发生,而另一种发生在单击屏幕上的任意位置时。
【讨论】:
shapesize() 方法,了解如何放大、缩小以及在某种程度上扭曲海龟。您还可以为海龟定义自己的多边形,制作您想要的任何形状或大小的按钮。
要创建一个简单的按钮,可能还有其他方法,但我就是这样做的。
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 < 50 and y > 100 什么时候是真的?最后,我看不到你的按钮来点击它。
我还没有尝试过,但这可能有效:
root = turtle.Screen()._root
btn = Button(root, text="This button exists in turtle")
btn.pack()
应该是这样的!
注意:由于 turtle 基于 tkinter,turtle.Screen() 包含 tk() 根 我们能够访问该根并创建一个 tkinter 按钮并将其添加到其中。
编辑:如果你在包中添加一个命令参数,你可以让按钮执行一个功能
【讨论】: