我怎样才能select某一首歌用pygame玩了?我把它们放入一个列表,但下面的代码无法正常工作。当我运行该应用程序,将打印"none"并且当我去掉pygame.mixer.music.play,应用程序给出了错误:“所需的整数此外,当我改变码作为;

    selected_song = random.randint(0,len(songs))
    pygame.mixer.music.load(songs[selected_song])

它给出了这样的错误:无法从RWops读取。所以我无法弄清楚。

from tkinter import *
import pygame, os, random
pygame.mixer.init()
songs = (pygame.mixer.music.load("A.mp3"),
     pygame.mixer.music.load("B.mp3"),
     pygame.mixer.music.load("C.mp3"),
     pygame.mixer.music.load("D.mp3"))
window=Tk()
window.geometry("175x150")
class Player:
    def __init__(self):
        pass
    def play(init):
    selected_song = random.choice(songs)
    #pygame.mixer.music.play(selected_song) #uncomment this
    print(selected_song) #comment this
    return selected_song

a = Player()
l1=Label(window,text="Music Player",font="times 20")
l1.grid(row=1,column=1)

b1=Button(window,text="Play",width=20,command=a.play)
b1.grid(row=4,column=1)
#b2=Button(window,text="Pause",width=20,command=stop)

    #song_list=os.listdir()
    #song_listbox=StringVar(window)
    #song_listbox.set("select songs")
    #menu=OptionMenu(window,song_listbox,*song_list)
    #menu.grid(row=4,column=4)
    window.mainloop()
分析解答

pygame.mixer.music.load()总是会返回None,因此您songs元组将始终(None, None, None, None)

pygame.mixer.music.load()

加载播放的音乐文件

load(filename) -> None
load(object) -> None>

这将加载一个音乐filename/file对象和播放做准备。如果音乐流已经玩它会被停止。这不启动音乐播放。

它总是有益的,如果不需要读出你使用的库文件。


您应该只存储在songs文件名:

songs = ("A.mp3", "B.mp3", "C.mp3", "D.mp3")

并发挥一个随机的音乐文件,做

...
selected_song = random.choice(songs)   # select music file
pygame.mixer.music.load(selected_song) # load music file
pygame.mixer.music.play()              # play it
...

请注意,如果音乐文件在你开始你的程序相同的目录,这只会工作。