返回列表 发新帖

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

[复制链接]

80

主题

1138

帖子

1258

积分

金牌会员

Rank: 6Rank: 6

积分
1258
发表于 2022-12-9 10:08:29 | 显示全部楼层 | 阅读模式 IP:
制作GUI钢琴

  • 导语
  • 实现思路
  • Python实现
导语

哈喽哈喽,下午好,我是小圆 ~
今天这篇文章,又给你们准备了一个有趣的小游戏~


前一段时间刷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不懂的问题,都可以来这里哦 这里还有学习资料与免费课程领取

Python实现

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('<KeyPress>', play_music)
master.bind("<KeyRelease>", on_key_release)
其余部分的代码就都是重复且枯燥的复制粘贴播放音乐,此处不再解释,最终效果如下



好啦,今天的分享到这里就结束了 ~
对文章有问题的,或者有其他关于python的问题,可以在评论区留言或者私信我哦
觉得我分享的文章不错的话,可以关注一下我,或者给文章点赞(/≧▽≦)/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册   手机动态码快速登录

x
打赏鼓励一下!

发表回复

您需要登录后才可以回帖 登录 | 立即注册   手机动态码快速登录

本版积分规则

 
 
点击这里给我发消息
点击这里给我发消息
官方微信

招募城市商务合作 电话/微信 18702940294
 
快速回复 返回顶部 返回列表