首页 > 解决方案 > 关闭窗口时 Python Turtle 显示错误

问题描述

我在 python 中有一个问题。我正在制作一个名为“Stars”的小程序,其中包含超过 29 行的海龟图形。当我在程序完成之前关闭海龟窗口时,它会显示错误。这不是什么大问题,但是当我将它转换为exe(使用pyinstaller)然后在程序完成之前关闭窗口时,会弹出一个警告框并说:“执行脚本星失败”。

错误图像

有没有比将每一行都放在 try-except 中更好的方法来忽略这一点?:

try:
   #each line of code
except:
   pass

提前致谢

当它有帮助时:我在 Python 3.7.7 和 Windows 10 中

这是代码:

from turtle import *
shape("turtle")
width(2)
color("gold")
begin_fill()
for _ in range(5):
        forward(100)
        right(2 * 360/5)
        forward(100)
        left(360/5)
end_fill()
penup()
goto(0, 200)
write("STAR", font = ("Arial", 50), align = "center")
goto(-200, -200)
pendown()
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
stamp()
forward(50)
exitonclick()

这是 pyinstaller 命令:

pyinstaller --noconfirm --onefile --noconsole  "C:/Users/jeeva/Desktop/Tanmay_new/python/Python_turtle_answers/Stars.py"

标签: pythonpython-3.xpython-3.7turtle-graphics

解决方案


你可以解决这个问题,就像你所说的那样通过try..except整行阻塞:

try:
    # all 29 lines of your code:
except:
    pass

它会工作得很好!


但是,我真的建议将您的程序安排成不同的功能;喜欢:

  1. 创建海龟的功能:

    def create_turtle():
        shape("turtle")
        width(2)
        color("gold")
    
  2. 绘制和填充星形的函数:

    def draw_fill_star():
        begin_fill()
        for _ in range(5):
                forward(100)
                right(2 * 360/5)
                forward(100)
                left(360/5)
        end_fill()
    
  3. 写“星”字的函数:

    def write_start():
        penup()
        goto(0, 200)
        write("STAR", font = ("Arial", 50), align = "center")
    
  4. 写邮票的功能:

    def write_stamps():
        goto(-200, -200)
        pendown()
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        stamp()
        forward(50)
        exitonclick()
    
  5. 最后,一个函数来执行它们。

    def execute():
        create_turtle()
        draw_fill_star()
        write_start()
        write_stamps()
    

现在,您可以将函数包装到一个try...except块中,如下所示:

try:
    execute()
except Terminator:
    print("Program has been terminated")

推荐阅读