使用Zelle graphics.py时,圆形触底后窗口无弹窗及点击关闭问题
搞定Zelle Graphics圆形触底弹窗与窗口关闭问题
嘿,我来帮你解决这个小问题!既然你已经能让圆形正常移动了,那咱们就把触底提示和窗口关闭的逻辑补上~
核心问题分析
你遇到的情况大概率是两个原因:
- 没正确判断圆形是否真正触底(比如只检测了圆心位置,没算上圆形半径)
- 没借助合适的弹窗工具,也没写好窗口关闭的触发逻辑
完整修改代码示例
下面是整合了所有功能的代码,我会一步步给你标注关键点:
from graphics import * from tkinter import messagebox # 因为graphics库本身没有弹窗,得用tkinter的这个模块 import time # 用来加移动延迟,让动画更流畅 # 创建窗口,设置大小 win = GraphWin("Moving Circle", 400, 500) win.setBackground("lightgray") # 创建圆形并绘制 circle = Circle(Point(200, 50), 25) # 圆心(200,50),半径25 circle.setFill("cornflowerblue") circle.draw(win) # 圆形移动逻辑+触底检测 move_speed = 3 while True: circle.move(0, move_speed) # 沿y轴正方向(向下)移动 # 计算圆形的底部边缘y坐标:圆心y值 + 半径 circle_bottom_y = circle.getCenter().getY() + circle.getRadius() # 窗口底部的y坐标就是窗口的高度(graphics坐标系左上角是(0,0),y轴向下递增) window_bottom_y = win.getHeight() # 判断是否触底:圆形底部碰到或超过窗口底部 if circle_bottom_y >= window_bottom_y: # 弹出提示消息 messagebox.showinfo("触底提示", "圆形已经碰到窗口底部啦!点击确定关闭窗口~") break # 跳出移动循环,准备关闭窗口 # 加个小延迟,避免移动太快看不清 time.sleep(0.01) # 关闭窗口 win.close()
关键细节说明
- 触底判断逻辑:一定要用
圆心y + 半径来计算圆形的底部位置,不然会出现圆形完全移出窗口才触发提示的情况。 - 弹窗实现:Zelle的graphics库没有内置弹窗功能,所以我们导入tkinter的
messagebox来实现提示,这是最方便的方式。 - 窗口关闭:弹窗点击确定后,
break跳出循环,然后调用win.close()就能关闭窗口了。
如果之前你的代码里有其他自定义逻辑,直接把触底检测和弹窗、关闭的部分替换进去就行~
内容的提问来源于stack exchange,提问作者user9367977
相关产品推荐
相关产品推荐

