当前位置: 首页 > news >正文

基于Python实现一个庆祝国庆节的小程序

功能:

  1. 添加互动功能:允许用户选择不同的祝福语或者查询不同的国庆节信息。
  2. 动态背景音乐:播放国庆节相关的背景音乐。
  3. 增加节日小测验:提供一些关于国庆节的趣味小测验,让用户参与。
  4. 增强图形用户界面 (GUI):使用更多的 tkinter 控件,比如按钮、复选框等,使界面更加丰富和互动。

下面是一个更全面的示例代码,包括以上的改进:

完整代码示例

import tkinter as tk
from tkinter import PhotoImage, messagebox, StringVar, OptionMenu
from datetime import datetime
import random
import os
from pygame import mixer# 初始化 pygame 混音器
mixer.init()# 国庆节祝福语列表
blessings = ["🎉 国庆节快乐!🎉","🇨🇳 祝愿祖国繁荣昌盛,人民幸福安康!🇨🇳","🌟 庆祝国庆,祝您和您的家人幸福安康,万事如意!🌟","🏆 向伟大的祖国致敬,祝愿大家国庆节快乐!🏆","🎊 国庆佳节,愿你心想事成,家庭幸福!🎊"
]# 国庆节历史背景
history = ("国庆节(National Day),是中华人民共和国的国庆日,定于每年的10月1日。""这是庆祝中国成立的纪念日,1950年10月1日,毛泽东主席在天安门广场上宣布中华人民共和国的成立。""从那时起,每年10月1日,全国各地会举行盛大的庆祝活动,包括阅兵仪式、烟花表演以及各种文化活动。"
)# 小测验
quiz = {"国庆节是哪一天?": ["10月1日", "12月25日", "7月4日", "1月1日"],"中华人民共和国是哪一年成立的?": ["1949年", "1950年", "1960年", "1980年"]
}# 获取随机测验题目
def get_random_quiz():question, options = random.choice(list(quiz.items()))return question, optionsdef get_national_day_date(year):# 国庆节的日期为每年的10月1日return datetime(year, 10, 1)def display_message():# 随机选择一条祝福语message = random.choice(blessings)return messagedef play_music():# 播放背景音乐music_file = 'national_day_music.mp3'  # 确保你有这个音乐文件if os.path.isfile(music_file):mixer.music.load(music_file)mixer.music.play(-1)  # 循环播放else:print("未找到音乐文件,确保有'national_day_music.mp3'文件在当前目录")def stop_music():# 停止播放背景音乐mixer.music.stop()def show_gui():# 创建主窗口root = tk.Tk()root.title("国庆节庆祝")# 获取当前年份now = datetime.now()year = now.year# 获取今年国庆节的日期national_day_date = get_national_day_date(year)date_str = national_day_date.strftime('%Y年%m月%d日')# 创建并放置标签label_date = tk.Label(root, text=f"今年的国庆节日期是: {date_str}", font=("Arial", 14))label_date.pack(pady=10)label_message = tk.Label(root, text=display_message(), font=("Arial", 14))label_message.pack(pady=10)# 显示国庆节历史背景label_history = tk.Label(root, text="国庆节背景:", font=("Arial", 16, "bold"))label_history.pack(pady=10)text_history = tk.Text(root, height=5, width=50, wrap='word')text_history.insert('1.0', history)text_history.config(state='disabled')  # 使Text控件不可编辑text_history.pack(pady=10)# 添加国庆节相关的图片try:image = PhotoImage(file='national_day.png')  # 确保你有这个图片文件label_image = tk.Label(root, image=image)label_image.pack(pady=10)except tk.TclError:print("未找到图片文件,确保有'national_day.png'文件在当前目录")# 音乐控制music_var = StringVar(value="播放音乐")music_button = tk.Button(root, textvariable=music_var, command=lambda: play_music() if music_var.get() == "播放音乐" else stop_music())music_button.pack(pady=10)# 小测验def check_answer(answer):correct_answers = {"国庆节是哪一天?": "10月1日","中华人民共和国是哪一年成立的?": "1949年"}if answer == correct_answers[current_question.get()]:messagebox.showinfo("小测验", "回答正确!")else:messagebox.showinfo("小测验", "回答错误,请再试试。")def show_quiz():question, options = get_random_quiz()current_question.set(question)option_menu['menu'].delete(0, 'end')for option in options:option_menu['menu'].add_command(label=option, command=tk._setit(selected_option, option))current_question = StringVar()selected_option = StringVar()quiz_button = tk.Button(root, text="获取小测验", command=show_quiz)quiz_button.pack(pady=10)option_menu = OptionMenu(root, selected_option, "")option_menu.pack(pady=10)submit_button = tk.Button(root, text="提交答案", command=lambda: check_answer(selected_option.get()))submit_button.pack(pady=10)# 显示窗口root.mainloop()if __name__ == "__main__":show_gui()

代码解释:

  1. 音乐播放:使用 pygame.mixer 播放背景音乐。请确保你在程序目录下有一个名为 national_day_music.mp3 的音乐文件。如果没有音乐文件,可以删除相关的代码行。
  2. 小测验功能:添加了一个小测验功能,用户可以获取随机的测验题目,并选择答案。程序会告诉用户答案是否正确。
  3. 动态更新:用户可以点击按钮获取新的测验题目,选择答案,并提交。
  4. GUI 控件
    • 音乐播放控制:一个按钮用于播放或停止背景音乐。
    • 小测验部分:显示测验题目和选择答案的选项,用户可以选择并提交答案。

注意事项

  • 图片文件:确保图片文件 national_day.png 在程序运行的同一目录下。如果没有图片,可以删除或注释掉相关的代码行。
  • 音乐文件:确保音乐文件 national_day_music.mp3 在程序运行的同一目录下。如果没有音乐文件,可以删除或注释掉相关的代码行。

运行这个程序时,它将展示一个更丰富的界面,包括国庆节的日期、祝福信息、历史背景、相关图片、背景音乐播放控件和小测验功能。希望这些改进能让你的程序更加有趣和互动!如果有任何进一步的需求或修改意见,随时告诉我。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 使用LDAP登录GitLab
  • 一、机器学习算法与实践_01基本概念与项目流程笔记
  • OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(二)
  • Git的学习笔记
  • 道可云人工智能元宇宙每日资讯|2024互联网岳麓峰会在长沙召开
  • HTML+CSS - 网页布局之网格布局
  • MySQL从入门到精通——实战45例
  • 压力测试(内存、磁盘、网络、cpu)
  • SAP学习笔记 - 开发04 - Fiori UI5 开发环境搭建
  • Git 使用教程:从入门到精通
  • Vue3 动态组件
  • 常见的站长工具接口有哪些?站长们该如何选择?
  • Echarts中文版 2D世界地图
  • Leetcode 寻找重复数
  • Vue3: setup语法糖
  • echarts花样作死的坑
  • Git学习与使用心得(1)—— 初始化
  • Javascript 原型链
  • JavaScript标准库系列——Math对象和Date对象(二)
  • REST架构的思考
  • uva 10370 Above Average
  • v-if和v-for连用出现的问题
  • vue自定义指令实现v-tap插件
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 高度不固定时垂直居中
  • 工程优化暨babel升级小记
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用docker-compose进行多节点部署
  • 使用Gradle第一次构建Java程序
  • 微信小程序填坑清单
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​卜东波研究员:高观点下的少儿计算思维
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (十八)Flink CEP 详解
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .ai域名是什么后缀?
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • ::什么意思
  • @Bean有哪些属性
  • [ SNOI 2013 ] Quare
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [<死锁专题>]
  • [AIGC] Java 和 Kotlin 的区别
  • [BZOJ4566][HAOI2016]找相同字符(SAM)