import pygame
import tkinter as tk
from tkinter import scrolledtext
pygame.mixer.init()
music_files = {
‘-’: ‘0.wav’,
‘1’: ‘1.wav’,
‘2’: ‘2.wav’,
‘3’: ‘3.wav’,
‘4’: ‘4.wav’,
‘5’: ‘5.wav’,
‘6’: ‘6.wav’,
‘7’: ‘7.wav’
}
def play_music():
user_input = text_box.get(“1.0”, tk.END).strip()
speed_str = speed_entry.get().strip()
if not user_input:
print(“输入框为空,请输入数字简谱。”)
return
try:
note_duration = int(speed_str)
except ValueError:
print(“速度输入不是有效的整数,请重新输入。”)
return
for digit in user_input:
if digit in music_files:
pygame.mixer.music.load(music_files[digit])
pygame.mixer.music.play()
pygame.time.wait(note_duration)
else:
print(f"数字 {digit} 没有对应的音乐文件。")
break
def create_context_menu(event):
context_menu = tk.Menu(root, tearoff=0)
context_menu.add_command(label=“复制”, command=lambda: text_box.event_generate(“<>”))
context_menu.add_command(label=“粘贴”, command=lambda: text_box.event_generate(“<>”))
context_menu.add_command(label=“全选”, command=select_all_text)
context_menu.add_command(label=“删除”, command=delete_text)
try:
context_menu.tk_popup(event.x_root, event.y_root)
finally:
context_menu.grab_release()
def select_all_text():
text_box.tag_add(tk.SEL, “1.0”, tk.END)
def delete_text():
text_box.delete(“1.0”, tk.END)
root = tk.Tk()
root.title(“数字简谱播放器”)
root.geometry(“400x250”) # 适当调整窗口大小
text_box = scrolledtext.ScrolledText(root, width=50, height=10)
text_box.pack(padx=10, pady=10)
text_box.bind(“”, create_context_menu) # 绑定右键点击事件
speed_label = tk.Label(root, text=“请输入播放速度(毫秒/音符):”)
speed_label.pack(pady=5)
speed_entry = tk.Entry(root)
speed_entry.pack(pady=5)
play_button = tk.Button(root, text=“播放音乐”, command=play_music)
play_button.pack(pady=10)
root.mainloop()
root.destroy()