Функция паузы в Pygame Mixer не работает - PullRequest
1 голос
/ 16 марта 2020

В настоящее время я делаю GUI с Tkinter, который играет музыку c. Программа умеет правильно воспроизводить песни, и я пытаюсь реализовать кнопку паузы. Это код, который у меня есть, кто-нибудь знает, почему это может не работать? Я знаю, что кнопка связана правильно, так как я пытался распечатать что-то, когда кнопка нажата, и это работает. Также сообщений об ошибках нет, звук просто не останавливается.

import pygame
from tkinter import *
import os
import urllib.request
import urllib.parse
import re
import requests
from PIL import ImageTk, Image

class Application(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.grid()
        pygame.mixer.init()
        self.downloadNum = 1
        self.pack(fill = BOTH, expand = 1)
        self.songDict = {}
        num = 1
        while True:
            if os.path.exists(str(num)+'.jpg'):
                os.remove(str(num)+'.jpg')
                num += 1
            else:
                break
        self.create_widgets()

    def create_widgets(self):
        Label(self, text="Available Songs").grid(row=0, column=0)
        for filename in os.listdir(r'C:\Users\alvin\Documents\School'):
            if filename.endswith(".mp3"):
                string = ""
                for x in filename:
                    if x == "_":
                        string += " "
                    else:
                        if x == ".":
                            break
                        string += x
                Label(self, text=string).grid()
        Label(self, text = "Enter your song!").grid(row=0, column = 1)
        self.entryBox = Entry(self)
        self.entryBox.grid(row=1, column =1)
        Button(self, text="Play!", command = self.playSong).grid(row=2, column =1)
        Label(self).grid(row=3, column =1)
        Label(self, text="Currently Playing:").grid(row=4, column=1)
        self.playing = Label(self, text="")
        self.playing.grid(row=5, column=1)

    def playSong(self):
        self.song = self.entryBox.get()
        self.newsong = ""
        for x in self.song:
            if x == " ":
                self.newsong += "_"
            else:
                self.newsong += x
        self.newsong = self.newsong.title()
        self.newsong = self.newsong + ".mp3"
        pygame.mixer.music.load(self.newsong)
        pygame.mixer.music.play(0)
        self.playing.configure(text=self.song.title())

        query_string = urllib.parse.urlencode({"search_query": self.song.title()})
        html_content = urllib.request.urlopen("http://www.youtube.com/results?" + query_string)
        search_results = re.findall(r'href=\"\/watch\?v=(.{11})', html_content.read().decode())

        f = open(str(self.downloadNum) +'.jpg','wb')
        f.write(requests.get('https://img.youtube.com/vi/' + search_results[0] + '/default.jpg').content)
        f.close()
        self.songDict[self.downloadNum] = self.newsong

        load = Image.open(str(self.downloadNum) + ".jpg")
        render = ImageTk.PhotoImage(load)
        img = Label(self, image=render)
        img.image = render
        img.place(x=145, y=135)
        self.downloadNum += 1

        Label(self).grid(row=6, column =0)
        Label(self).grid(row=7, column=0)
        Label(self).grid(row=8, column=0)
        Label(self).grid(row=9, column=0)
        Label(self).grid(row=10, column=0)
        pauseButton = Button(self, text="||", command = self.pause)
        pauseButton.grid(row = 11, column = 1)

    def pause(self):
        pygame.mixer.pause()

root = Tk()
root.title("MP3 Player")
root.geometry("400x400")
app = Application(root)
root.mainloop()

1 Ответ

0 голосов
/ 16 марта 2020

попробуйте использовать:

pygame.mixer.music.pause()

вместо:

pygame.mixer.pause()
...