Python 使用 Turtle 与 PySimpleGUI 制作中秋互动弹窗代码

Jasper
Jasper
发布时间:2026-10-14| 5人浏览过
原创

本文介绍如何使用 Python 的 Turtle 库绘制月亮和小人,并结合 PySimpleGUI 实现交互式弹窗。通过用户选择触发不同动画效果,生成一份有趣的中秋互动礼物。文章还详细说明了如何将 Python 脚本打包为独立的 exe 可执行文件,方便分享给好友。

Python 中秋互动弹窗程序设计

这段代码实现了图形界面弹窗设计,能够根据用户的交互选择展示不同的画面内容,是一款简单且富有趣味性的中秋节日礼物程序。

这是首次尝试使用 Turtle 库进行图形绘制,由于经验有限,代码逻辑可能不够精简,存在冗余部分,如有不足之处欢迎指正。

Python 程序打包为 exe 的步骤

若希望将该程序分享给朋友,可以将 Python 源码打包为 exe 可执行文件,具体操作步骤如下:

  • 首先,在电脑桌面上新建一个文件夹。
  • 接着,将需要打包的 Python 源文件放入该文件夹中。
  • 然后,在该文件夹目录下打开命令行窗口(参考示意图),并输入命令:pyinstaller -F filename.py(其中 filename.py 替换为你的实际文件名)。
  • 执行完毕后,在生成的 dist 文件夹中即可找到打包好的小程序文件。

程序运行效果展示

以下是程序运行后的部分效果截图,展示了经过弹窗交互选择后呈现的不同动画结果。

源代码与自定义说明

完整的源代码已提供,有需要的读者可自行获取使用。


##Author:Griffy
##Date:2021-9-21
 
from turtle import *
import time
import PySimpleGUI as sg     #弹框制作模块
 
def draw_count_down(i):        #倒数
    bgcolor('black')
    speed(0)
    up()
    goto(-50,-100)
    color('white')
    write(i, align="center",font=('Times New Roman', 200, 'bold'))
    time.sleep(1)
 
def draw_moon():                 #画月亮
    bgcolor('#093FB7')
    color('#F4EE00', '#F4EE00')
    begin_fill()
    speed(2)
    up()
    goto(0, -300)
    down()
    circle(300)
    end_fill()
 
def draw_people():    #画小人
    up()
    fillcolor()
    begin_fill()
    color('black','white')
    goto(-300, 50)  # 脖子坐标
    down()
    circle(75)  # 半径为75的脑袋
    end_fill()
    right(90)
    forward(175)  # 身体的长度175像素
    right(45)
    forward(100)  # 腿长100像素
    up()
    goto(-300, -120)  # 画另一条腿
    down()
    left(90)
    forward(100)
    up()
    goto(-300, -5)  # 手臂坐标
    down()
    left(45)
    forward(100)  # 第一只手臂长度
    left(45)
    forward(67)  # 手掌长度
    up()
    goto(-300, -40)  # 第二只手臂坐标
    down()
    right(45)
    forward(100)  # 第二只手臂长度
    right(45)
    forward(67)
    up()
    goto(-330, 155)  # 第一只眼睛起始坐标
    down()
    right(45)
    forward(50)  # 眼睛长度为50
    up()
    goto(-270, 155)  # 第二只眼睛起始坐标
    down()
    forward(50)
    up()
    pencolor('#F39F79')
    goto(-340,100) #红脸蛋第一只眼
    seth(0)
    down()
    backward(40)
    up()
    goto(-260, 100)  # 红脸蛋第二只眼
    down()
    forward(40)
    time.sleep(1)
 
def draw_heart(size):            # 画爱心
    color('red', 'pink')
    down()
    setheading(150)
    begin_fill()
    forward(size)
    circle(size * -3.745, 45)
    circle(size * -1.431, 165)
    left(120)
    circle(size * -1.431, 165)
    circle(size * -3.745, 45)
    forward(size)
    end_fill()
 
def send_heart():                  #发射爱心
    up()
    goto(-50, -22)
    draw_heart(14)
    up()
    goto(120, -22)
    draw_heart(25)
    penup()
    goto(305, -22)
    draw_heart(43)
 
def wr_character():
    up()
    goto(-50,-200)
    pencolor('black')
    write('中', font=('幼圆', 60, 'bold'))
    up()
    goto(50,-200)
    write('秋', font=('幼圆', 60, 'bold'))
    up()
    goto(150,-200)
    write('快', font=('幼圆', 60, 'bold'))
    up()
    goto(250,-200)
    write('乐', font=('幼圆', 60, 'bold'))
 
def draw_pupu():       #画便便
    up()
    shapesize(10, 2)
    speed(2)
    fillcolor()
    color('#805140','#805140')
    begin_fill()
    goto(-50, -20)
    down()
    circle(20)
    end_fill()
    begin_fill()
    up()
    goto(-50, -80)
    down()
    circle(40)
    end_fill()
    begin_fill()
    up()
    goto(10, -110)
    seth(90)
    down()
    circle(60,180)
    seth(0)
    forward(120)
    end_fill()
 
def present_good():        #认为我是好人送的礼物
    setup(1000,700)
    pensize(10)
    hideturtle()
 
    numbers=[5,4,3,2,1]      #进行倒数
    for i in numbers:
        draw_count_down(i)
        undo()
    draw_moon()
    draw_people()
    send_heart()
    wr_character()
    done()
 
def present_bad():     #认为我不好送的礼物
    setup(1000, 700)
    pensize(10)
    hideturtle()
    numbers=[5,4,3,2,1]      #进行倒数
    for i in numbers:
        draw_count_down(i)
        undo()
    draw_moon()
    draw_people()
    draw_pupu()
    wr_character()
    done()
 
layout=[                                    #弹框内容设计
    [sg.Text('请输入你的名字:')],[sg.Input()],
    [sg.Text('请回答下面这个问题哦!')],
    [sg.Text('xxx是个大好人是吗?')],
    [sg.Button('是的是的')],[sg.Button('不是')]
]
 
sg.popup('你好呀!我是你的好朋友xxx为你定制的中秋节礼物⭐','请按OK键继续') #这是一个简易弹框
time.sleep(1)
window=sg.Window('中秋礼物',layout)
event,value=window.read()
window.close()
if event == '是的是的':
    sg.popup(f'{value[0]}请按OK键接收xxx的中秋礼物!♥')   #这是一个简易弹框  #这里的value[0],是因为value返回内容为字典
    time.sleep(1)
    present_good()
else:
    sg.popup(f'{value[0]}竟然对xxx有意见,你还想要礼物!!','但是xxx是个大度的人,送你礼物吧','请按OK键接收xxx的中秋礼物!')          
    present_bad()

弹窗中显示的问题文本和提示信息,用户可以根据个人喜好进行自定义修改。

最后,预祝各位中秋节快乐。

关于 Python 结合弹窗设计与 Turtle 绘制爱心的介绍至此结束,更多相关技术内容可查阅本站往期文章或继续浏览后续教程,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。