Python实现简易小钢琴
使用Python和内带的Tkinter库、winsound 模块实现的简单小钢琴。
Tkinter库和winsound模块不需要额外安装就可以使用,因为它们是Python的标准库之一,已经随着Python的安装包一起提供。标准库是Python官方提供的一组核心模块和工具,它们被视为Python语言的一部分,因此在安装Python解释器时就会自动包含这些标准库。
Tkinter库是Python的标准图形用户界面(GUI)工具包,它提供了创建和管理GUI应用程序所需的组件和功能。Tkinter基于Tcl/Tk工具包,是Python内置的库,因此无需额外安装。
winsound模块是Python的标准库之一,用于在Windows操作系统中播放声音。它提供了简单的接口,它提供了一些用于控制Windows系统声音的函数,比如播放声音、发出蜂鸣声等,可以用于播放系统提供的声音文件或者自定义的声音。
我对乐了解几乎为零,相关音高(pitch)可以参考这里https://www.autopiano.cn/toolbox/pitch
以下是一个使用Python和内带的Tkinter库、winsound 模块实现的简单钢琴程序的源码:
import tkinter as tk
import winsound # 注意:winsound 模块只在 Windows 上可用
# 定义一个播放声音的函数
def play_sound(frequency):
winsound.Beep(frequency, 500) # 播放500毫秒的声音
# 创建主窗口
root = tk.Tk()
root.title("The Little Piano")
# 定义音符和对应的频率
notes = {
'a': 261,
's': 294,
'd': 329,
'f': 349,
'g': 392,
'h': 440,
'j': 494,
'k': 523
}
# 创建一个函数来生成钢琴键
def create_key(note):
def on_click(e=None):
play_sound(notes[note])
# 按下键的视觉反馈
button.config(relief=tk.SUNKEN)
button.after(100, lambda: button.config(relief=tk.RAISED))
button = tk.Button(root, text=note, width=5, height=5, command=on_click)
button.pack(side=tk.LEFT, padx=5, pady=5)
root.bind(note.lower(), on_click) # 绑定按键事件
# 为每个音符创建一个钢琴键
for note in notes:
create_key(note)
# 启动Tkinter事件循环
root.mainloop()
运行效果如下:
你可以用英文状态下按下琴键上的字符,或用鼠标单击琴键试试了。