如何使用simpleGUI模块绘制圆形,为房屋添加左上角背景太阳
如何用simplegui的canvas.draw_polygon绘制太阳(近似圆形)
当然可以用canvas.draw_polygon实现圆形(太阳)——原理是用大量短边的多边形来近似圆形,边数越多,形状越接近完美的圆。
具体实现步骤:
- 确定太阳的中心坐标、半径和边数(比如选36边,视觉上已经足够接近圆形)
- 计算多边形每个顶点的坐标:利用Python标准库
math的三角函数(sin/cos)计算每个顶点相对于中心的位置(math属于Python自带库,不算额外GUI模块) - 把所有顶点传入
draw_polygon,设置填充色为黄色,边框用同色系增强效果
修改后的完整代码:
import simplegui import math def draw_handler(canvas): # 先画太阳(如果要太阳在房屋背景层,就把这段放在最前面) sun_center = (80, 80) # 左上角位置 sun_radius = 40 sides = 36 # 边数越多越接近圆 sun_points = [] for i in range(sides): angle = 2 * math.pi * i / sides x = sun_center[0] + sun_radius * math.cos(angle) y = sun_center[1] + sun_radius * math.sin(angle) sun_points.append((x, y)) canvas.draw_polygon(sun_points, 2, "orange", "yellow") # 原房屋绘制代码 canvas.draw_polygon([(100,400),(300,400),(300, 200),(100,200)], 3, "black", "wheat") canvas.draw_polygon([(200, 50),(75,200),(325,200)], 3, "black", "red") canvas.draw_polygon([(175, 400),(225, 400),(225, 325),(175,325)], 3, "black", "brown") canvas.draw_polygon([(175, 280),(175, 230),(125,230),(125,280)], 8, "brown") canvas.draw_polygon([(225, 280),(225, 230),(275,230),(275,280)], 8, "brown") canvas.draw_line((250,230),(250,280), 8, "brown") canvas.draw_line((225,255),(275,255), 8, "brown") canvas.draw_line((150,230),(150,280), 8, "brown") canvas.draw_line((125,255),(175,255), 8, "brown") frame = simplegui.create_frame("Home Sweet Home", 400, 400) frame.set_canvas_background("lightblue") frame.set_draw_handler(draw_handler) frame.start()
关键注意点:
- 如果希望太阳在房屋的背景层(不遮挡房屋),必须把太阳的绘制代码放在所有房屋图形代码的前面——因为simplegui的绘制顺序是先画的图形在底层,后画的在顶层。
- 若你确实不能使用
math模块,可以手动预计算一组近似圆形的顶点坐标(提前算出多个点的x、y值直接写进列表),效果一致但操作更繁琐。
内容的提问来源于stack exchange,提问作者Finn
相关产品推荐
相关产品推荐

