嗨嗨,大家好

今天找到了一个有意思的游戏,来分享给你们


就是用Python做一个简易版的钢琴小游戏

本篇文章就来分享一下思路与代码

实现思路

在写代码之前,还是先整理下思路,用Python实现的话,只需要创建界面与按钮,并给每个按钮绑定播放音阶的函数即可,这样简单的功能肯定用不着PyQt这样的大家伙,tkinter就能完美实现。

下面的问题就转到如何使用Python播放音频文件,首先搜了下,了解到playsound库

源码.资料.素材.点击领取即可

from playsound import playsound
playsound('A4.mp3')

就像上面代码展示的一样,两行代码就能播放mp3,但也仅限于此,无法指定播放时长等功能,如果一个音阶时长8s,必须要等上一个播放完毕才能播放下一个,这样的话输出的声音就不能连贯。

继续研究之后发现pygame可以完美实现音频播放与简单处理,并且配合time库可以控制播放时长,例如每个音阶只播放 1s

from pygame import mixer
pygame.mixer.music.play()
time.sleep(10)
pygame.mixer.music.stop()

但是这样的话,在两个音阶之间切换时会有一个爆音,于是可以使用fadeout(time)进行淡出,在指定时间内音量由初始值渐变为0,最后停止播放。

但这样的话,会在两个音阶切换时有延迟,如果想要没有延迟的话就需要使用多线程来进行播放,但在tkinter中使用多线程似乎是比较复杂的,遂切换思路,使用mixer.Sound方法来进行播放,仍是两行代码就能播放,并且可以同时按下多个按键!

from pygame import mixer
mixer.Sound("mp3/Cs1.wav").play()

搞定了音乐播放后面就是体力活了,下面开写代码!

Python实现

首先是下载对应的全部音阶文件,随便找个钢琴网站 F12 一下就能找到,至于tkinter的部分并没有太多,只是常规的创建标题、按钮

python学习交流Q群:770699889 ###
master.title("Python_Piano_GUI")
master.geometry("1766x460")
self.Cs1_button = Button(master,bg="black", fg='white',text="C1#", command=Cs1, height=180, width=50)
self.Cs1_button.grid(row=1, columnspan=2)
self.D1_button = Button(master, bg="white", text="D1", height=200, width=50)
self.D1_button.grid(row=5, column=1)
self.Ds1_button = Button(master, bg="black", fg="white", text="D1#", command=Ds1, height=180, width=50)
self.Ds1_button.grid(row=1, columnspan=4)·······

需要注意的是,在mac系统下是无法通过设置background调整按钮的背景颜色,需要安装tkmacosx来解决。

此外,为了让按下按钮能对应变化按钮颜色需要监听系统键盘的按下(press)与释放(release)

python学习交流Q群:770699889 ###
def on_key_release(event):if event.keysym in keys:keys[event.keysym].config(bg=btn_bg)
master.bind('<KeyPress>', play_music)
master.bind("<KeyRelease>", on_key_release)

其余部分的代码就都是重复且枯燥的复制粘贴播放音乐,此处不再解释,最终效果如下


好啦,今天的分享到这里就结束了 ~

如果需要更多视频学习的可以在b站搜索 :Python小圆 / ka-爆浆麻薯团子

对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

Python制作GUI钢琴,几行代码完成一个游戏项目相关推荐

  1. 用 Python 制作GUI钢琴~几行代码就能完成一个游戏项目

    制作GUI钢琴 导语 实现思路 Python实现 导语 哈喽哈喽,下午好,我是小圆 ~ 今天这篇文章,又给你们准备了一个有趣的小游戏~ 前一段时间刷b站,看到一些up主制作的Matlab钢琴很火,很好 ...

  2. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  3. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  4. 爬虫python代码-Python爬虫入门(01) -- 10行代码实现一个爬虫

    跟我学习Python爬虫系列开始啦.带你简单快速高效学习Python爬虫. 一.快速体验一个简单爬虫 以抓取简书首页文章标题和链接为例 简书首页 就是以上红色框内文章的标签,和这个标题对应的url链接 ...

  5. python爬虫代码-Python爬虫入门(01) -- 10行代码实现一个爬虫

    跟我学习Python爬虫系列开始啦.带你简单快速高效学习Python爬虫. 一.快速体验一个简单爬虫 以抓取简书首页文章标题和链接为例 简书首页 就是以上红色框内文章的标签,和这个标题对应的url链接 ...

  6. 用 Python 制作 GUI 钢琴~几行代码就能完成一个游戏项目

    导语 哈喽哈喽~铁汁萌!!今天这期呢小编又准备了一个好玩又适合学习的游戏项目给大家!!

  7. python闹钟界面源码_Python GUI 教程 25行代码写一个小闹钟

    今天我们讲一下用Python写的GUI小程序.一个小闹钟(只是屏幕提示,没有声音哦) 让我们先介绍这个闹钟如何奇葩. 需要通过命令行启动. 没有标题栏. 没菜单. 甚至没有关闭按钮. 没有运行界面. ...

  8. python网页版_经典python学习教程:20行代码打造一个微信群聊助手,解放双手

    今天的Python学习教程教大家如何用20行Python代码实现微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的 ...

  9. Python 人工智能大全之3行代码创建一个 AI 论文机器人

    Python 是一种广泛使用的编程语言,易于学习且用途广泛.它可用于为各种任务创建程序,例如数据分析.Web 开发和人工智能 (AI) 编写.在本文中,我们将向您展示可用于创建 AI 论文作者的三行 ...

最新文章

  1. 《iOS 9应用开发入门经典(第7版)》——第2章,第2.4节小结
  2. 图像去模糊之初探--Single Image Motion Deblurring
  3. 有这个OCR程序,不用再买VIP了,Python 调用百度OCR API
  4. 关于压缩工具 7z(7-zip) 的选项 -u(更新压缩档案中的文件)的解读
  5. 黄聪:PHP获取MAC地址(转)
  6. 【转载】游戏并发编程的讨论 Nodejs并发性讨论 语法糖术语
  7. Shell子程序结构,函数
  8. 淘淘商城第105讲——购物车实现分析及工程搭建
  9. Java集成openCV实现图片背景切换
  10. Java完全自学手册pdf,由浅入深,循序渐进(1)
  11. 百度螺旋桨PaddleHelix论道“AI+生物计算”,加速推进多维价值释放
  12. python小游戏编程arcade----坦克动画图片合成
  13. ESP32S3系列--代码执行速度优化(从PSRAM执行代码)
  14. STM32外部引脚电路个人总结
  15. ATTO 700 荧光染料 齐岳
  16. 【笔记】编程的原则:改善代码质量的101个方法
  17. bearer token头_BearerToken之JWT的介绍
  18. iOS开发--AVFoundation视频合成(添加背景音乐)
  19. THE BUTTON OF HABIT IS ON
  20. python3爬虫——千库网

热门文章

  1. 阿里云OSS、EsayExcel
  2. win7系统开机出现OEM7GRUB 0.4.4提示无法进入系统的原因及两种解决方法
  3. 中国平台式扫描仪市场趋势报告、技术动态创新及市场预测
  4. 对留学最有用的8种英语考试
  5. 香港公司注册详细介绍
  6. ORA-01722:invalid number-解决GAT项目中车辆维修Bug(续)
  7. 修改ntp服务器rac,RAC时间同步的两种方法【NTP时间同步服务器】
  8. 技术方案PPT汇报经验总结
  9. ViewUI的Table组件使用摘记
  10. 【SCSS】vue3+vite项目引入SCSS及使用SCSS全局变量