【发布时间】:2017-10-01 19:58:47
【问题描述】:
我是 python 新手,所以请善待。 我最近开始了一个项目,使用 pygame 和 tkinter 的 mp3 播放器并遇到了问题。当前一首歌曲完成后,我无法让播放器转到下一首歌曲。有什么方法可以做到这一点,或者有什么方法可以查看歌曲的长度?
其他一切都很好,玩得很好。这是代码:
#IMPORTS
from tkinter import *
from pygame import mixer
import pygame
import time
#listing music:
music = [
"Tobu - Candyland.mp3",
"Alan Walker - Spectre.mp3",
"Tobu - Hope.mp3",
"Tobu - Life.mp3",
"Tobu - Mesmerize.mp3",
"DEAF KEV - Invincible.mp3",
"Different Heaven & EH!DE - My Heart.mp3",
"Disfigure - Blank.mp3",
"Ahrix - Nova.mp3",
"Alan Walker - Fade.mp3",
"jim-yosef-firefly-ncs-release.mp3",
"Alan Walker - Force.mp3",
]
#WINDOW SETTINGS
window = Tk()
window.title("GAMING MUSIC by KOOB")
window.geometry("700x50")
window.wm_iconbitmap('media_logo.ico')
topFrame = Frame(window)
topFrame.pack()
bottomFrame = Frame(window)
bottomFrame.pack(side=BOTTOM)
window.resizable(width=False, height=False)
window["bg"] = "black"
music_number = int(0)
music_number2 = (music_number)
next_music = (music[music_number + 1])
current_music = (music[music_number])
paused = True
#DEFINITIONS BELOW:
def quitprogram():
time.sleep(0.25)
window.destroy()
time.sleep(0.25)
quit()
def nextsong():
global songLABEL
global music_number
global current_music
global music
global music_number2
global next_music
mixer.music.stop()
music_number = int(music_number2 + 1)
music_number2 = (music_number)
print (music_number)
current_music = (music[music_number])
mixer.music.load(current_music)
songLABEL.forget()
time.sleep(0.5)
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
time.sleep(0.5)
mixer.music.play()
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def lastsong():
global songLABEL
global music_number
global current_music
global music
global music_number2
global next_music
mixer.music.stop()
music_number = int(music_number2 - 1)
music_number2 = (music_number)
print (music_number)
current_music = (music[music_number])
mixer.music.load(current_music)
songLABEL.forget()
time.sleep(0.5)
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
time.sleep(0.5)
mixer.music.play()
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def playpause():
global songLABEL
global current_music
global next_music
print(music_number)
current_music = (music[music_number])
global paused
if mixer.get_init():
if paused is False:
mixer.music.pause()
paused = True
else:
mixer.music.unpause()
paused = False
else:
mixer.init()
mixer.music.load(current_music)
mixer.music.play()
paused = False
songLABEL.forget()
songLABEL = Label(text=current_music, fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
next_music = (music[music_number + 1])
pygame.mixer.music.queue(next_music)
print ("NEXT: ", next_music)
def rewindsong():
pygame.mixer.music.rewind()
def volumedown():
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() - 0.1)
def volumeup():
pygame.mixer.music.set_volume(pygame.mixer.music.get_volume() + 0.1)
playBUTTON = Button(text="PLAY-PAUSE", fg="white")
playBUTTON.pack(side=LEFT)
playBUTTON.configure(command=playpause)
playBUTTON["bg"] = "black"
nextBUTTON = Button(text=">>>", fg="white")
nextBUTTON.pack(side=LEFT, padx=10)
nextBUTTON.configure(command=nextsong)
nextBUTTON["bg"] = "black"
lastBUTTON = Button(text="<<<", fg="white")
lastBUTTON.pack(side=LEFT, padx=10)
lastBUTTON.configure(command=lastsong)
lastBUTTON["bg"] = "black"
rewindBUTTON = Button(text="replay", fg="white")
rewindBUTTON.pack(side=LEFT, padx=10)
rewindBUTTON.configure(command=rewindsong)
rewindBUTTON["bg"] = "black"
volumedownBUTTON = Button(text="VOL -", fg="white")
volumedownBUTTON.pack(side=LEFT, padx=10)
volumedownBUTTON.configure(command=volumedown)
volumedownBUTTON["bg"] = "black"
volumeupBUTTON = Button(text="VOL +", fg="white")
volumeupBUTTON.pack(side=LEFT, padx=10)
volumeupBUTTON.configure(command=volumeup)
volumeupBUTTON["bg"] = "black"
songLABEL = Label(text="music provided by NoCopyrightSounds", fg="white")
songLABEL.pack(side=TOP)
songLABEL["bg"] = "black"
window.protocol('WM_DELETE_WINDOW', quitprogram)
#THE WINDOW BEING KEPT OPEN
window.mainloop()
【问题讨论】:
-
最近回答了一个类似的问题,可以帮到你:stackoverflow.com/a/46462023/6486738
-
这个答案可能也有帮助:stackoverflow.com/a/43836610/6486738
-
还是不行。我将您所说的内容放入代码中,但出现了:for event in mixer.music.get_endevent(): TypeError: 'int' object is not iterable
-
仔细阅读答案。
for event in mixer.music.get_endevent():没有在任何链接中提及。 -
然后它说虽然对于 pygame.event.get() 中的事件:pygame.error: video system not initialized