栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

导语

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

前一段时间刷b站,看到一些up主制作的Matlab钢琴很火,很好玩的样子

作为 游戏狂热爱好者小编第一想法当然是能否用 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的部分并没有太多,只是常规的创建标题、按钮

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)

def on_key_release(event):
    if event.keysym in keys:
        keys[event.keysym].config(bg=btn_bg)
master.bind('', play_music)
master.bind("", on_key_release)

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

-END-

这期钢琴块小游戏分享到这就结束了~希望对你们学习Python有些许帮助!!以小编的经验来看边玩边学习才是进步最快的方法!!最后呢小编呐希望你们玩的开心学的也开心~

咳咳~~辰辰那啥记得给我点个三连再走啦!‍♀️️️️✨爛爛✨mua呐~~

需要完整源码跟Python学习资料的点击这行字体即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号