首页 > 解决方案 > 如何控制海龟图形窗口的打开和关闭?

问题描述

我正在编写一个使用 python turtle 图形模块生成图像的程序。有没有办法控制窗口何时打开和关闭?我知道turtle.bye()turtle.exitonclick()关闭窗口,但再次打开它是个问题。

turtle.Turtle()目前我只是通过分配给这样的变量来打开窗口:

t = turtle.Turtle()

我查看了文档,也查看了这里,但我没有找到任何东西。

标签: pythonturtle-graphics

解决方案


这里展示了如何在不需要用户输入的情况下隐藏和重新显示海龟图形窗口。它使用 tkinterafter()方法来安排对我命名的函数的未来调用do_turtle_stuff()(如果你感兴趣的话)。

它通过“深入了解”并获取底层tkinter根窗口并对其进行操作来实现此目的。为了允许用户执行几个“命令”,它通过调用自身来重新安排自己运行增益after()(除非用户键入“退出”)。对于您正在做的事情,您可能不需要这样做。

import turtle


def do_turtle_stuff(root):
    user_input = input('Enter command ("foo", "bar", or "exit"): ')

    if user_input == "exit":
        root.withdraw()  # Hide the turtle screen.
        root.quit()  # Quit the mainloop.
        return
    elif user_input == "foo":
        turtle.forward(50)
        turtle.left(90)
        turtle.forward(100)
    elif user_input == "bar":
        turtle.forward(100)
        turtle.left(90)
        turtle.forward(100)
    else:
        print('Unknown command:', user_input)

    root.after(0, lambda: do_turtle_stuff(root))


root = turtle.getscreen()._root
root.after(0, lambda: do_turtle_stuff(root))
root.mainloop()

print('back in main')
input('Press Enter key to do more turtle stuff ')

root.state('normal')  # Restore the turtle screen.
root.after(0, lambda: do_turtle_stuff(root))
root.mainloop()

print('done')

推荐阅读