栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何检测python Turtle图形中的X(关闭)按钮?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何检测python Turtle图形中的X(关闭)按钮?

是的,确实可以通过注册一个函数(我称它为

on_close
,但是您可以选择任何函数名)来拦截窗口关闭事件,从而避免这种情况。

一个棘手的事情是该类的

protocol
一种方法
Tk
。在不
tkinter
使用Turtle的情况下,您可以
Tk
自己创建对象作为顶级(或“根”)窗口小部件。在使用
turtle
模块提供的小部件时,
我们如何访问顶级小部件? 它可以通过
winfo_toplevel
canvas
方法使用
(可以通过
turtle
模块或屏幕对象进行访问)。

您所观察到的错误是由无限循环导致的,该循环试图在窗口(以及画布)已经消失时绘制东西。因此,下一个棘手的事情是,如何防止它尝试这样做?正如Apostolos对“如何在Tkinter中处理窗口关闭事件?”的回答所建议的,我们可以使用全局布尔标志。(就像我叫Apostolos一样

running
。但是您可以选择对您有意义的任何名称。)这样,我们的循环不再是无限的了,它是一个有条件的循环。因为在三个乌龟移动之间可能关闭了窗口,所以我也检查了那里的标志:

import turtlewn = turtle.Screen()canvas = wn.getcanvas()  # or, equivalently: turtle.getcanvas()root = canvas.winfo_toplevel()tess = turtle.Turtle()def on_close():    global running    running = Falseroot.protocol("WM_DELETE_WINDOW", on_close)running = Truewhile running:    tess.forward(50)    if not running:        break    tess.left(120)    if not running:        break    tess.forward(50)

在我的计算机上,如果没有这两个提示,它也可以正常工作而没有错误消息

    if not running:        break

零件,但这可能只是幸运的时机,所以我不会依赖它。(除非有人可以解释为什么这总是足够的。)

注意: 不需要调用

root.destroy()
in
on_close
,因为无论如何,循环是程序中最后要运行的东西。( 请注意 ,我也
不会调用
mainloop()
)。因此,当我们退出循环或由于其条件不再成立而导致循环结束时,程序将结束并关闭窗口。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464502.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号