Изменение громкости при перемещении ползунка - PullRequest
1 голос
/ 16 января 2020

У меня есть код, и это часть его:

import PySimpleGUI as sg
import pygame

class Music:

    def __init__(self, file):
        self.sound = file

    def play(self):
        pygame.init()
        pygame.mixer.init()
        pygame.mixer.music.load(self.sound)
        pygame.mixer.music.play()

    def volchange(volume):
        pygame.mixer.music.set_volume(volume)  # The set_volume range is from 0.00 to 1.00 (every 0.01)

    def isplaying():
        return pygame.mixer.music.get_busy()

layout = [
    [sg.Button('Play'), 
     sg.Slider(key = 'volume', range=(0, 100), 
     orientation='h', size=(10, 15), default_value= 100)]
]

window = sg.Window('Help me', layout)

while True:
    event, values = window.read()
    if event == 'Play':
        path = "song.mp3"
        music = Music(path)
        music.play()
    if Music.isplaying():
        Music.volchange(float(values['volume'] / 100))

Я хочу, чтобы громкость звука изменялась в реальном времени при перемещении ползунка. Когда я помещаю

if = Music.isplaying():
    Music.volchange(values['volume'] / 100)

в l oop while True:, ничего не работает. Но, как я заметил, этот l oop продолжает работать каждый раз, когда нажимается кнопка «Play». Как я могу установить проверку isplaying в l oop, чтобы она работала все время?

PS Я стараюсь изо всех сил с Engli sh.

1 Ответ

0 голосов
/ 16 января 2020

Ползунок не вызывает события, если они не включены enable_events = True.
Ваше приложение ожидает, пока не будет нажата кнопка воспроизведения. См. Элемент ползунка .

layout = [
    [sg.Button('Play'), 
     sg.Slider(key = 'volume', range=(0, 100), 
     orientation='h', size=(10, 15), default_value= 100, 
     enable_events = True)] # <--- enable slider moved event
]
...