Переключить музыку вкл / выкл Kivy - PullRequest
0 голосов
/ 31 мая 2018

Вот часть моего .py файла.Я хочу, чтобы on_state запускался каждый раз, когда я нажимаю кнопку, но она не работает.Я вставил операторы print для проверки каждой части, и он напечатает «ONSTATE !!!»каждый раз, когда я переключаю кнопку.Но ни одно из 'down' или 'normal' состояний никогда не печатается.

class MusicScreen(Screen):

enter = ObjectProperty(None)
text_input = ObjectProperty(None)
stop = ObjectProperty(None)
musicbutton = ToggleButton()

class MainApp(App):

def build(self):
    return presentation

def on_state(self, state, filename):
    print("ONSTATE!!!")
    sound = SoundLoader.load('/users/nolandonley/desktop/MP3/mus/' + filename + '.m4a')
    if state == "down":
        print("DOWN")
        sound.volume = .5
        sound.play()
    if state == "normal":
        print("normal")
        sound.stop()

Вот посмотрите на мой файл .kv для проекта.

<MusicScreen>:

text_input: text_input
id: "music"
name: "music"
BoxLayout:
    size: root.size
    pos: root.pos
    orientation: "vertical"
    FileChooserListView:
        id: filechooser
        rootpath: "/Users/nolandonley/desktop/MP3/mus"
        on_selection: text_input.text = self.selection and self.selection[0] or ''

    TextInput:
        id: text_input
        size_hint_y: None
        height: 50
        multiline: False
    ToggleButton:
        #pos: 44, 30
        size_hint: 1, .2
        text: "Play/Stop By File"
    ToggleButton:
        id: musicbutton
        #pos: 44, 30
        size_hint: 1, .2
        text: "Play/Stop By Title"
        on_state: app.on_state(self, text_input.text)

1 Ответ

0 голосов
/ 31 мая 2018

Stop Play Music

Использование ObjectProperty и sound.unload () для остановки воспроизведения музыки.

main.py

class MainApp(App):
    sound = ObjectProperty(None, allownone=True)

    def build(self):
        return ScreenManagement()

    def on_state(self, state, filename):
        print("ONSTATE!!!")
        print("\tstate=", state)

        if self.sound is None:
            self.sound = SoundLoader.load(filename)

        # stop the sound if it's currently playing
        if self.sound.status != 'stop':
            self.sound.stop()

        if state == "down":
            self.sound.volume = .5
            self.sound.play()
        else:   # if state == "normal":
            if self.sound:
                self.sound.stop()
                self.sound.unload()
                self.sound = None

Пропустить состояние кнопки переключения

Не работает, поскольку вы передаете объект, то есть экземпляр кнопки переключения.

Заменить

on_state: app.on_state(self, text_input.text)

с

on_state: app.on_state(self.state, text_input.text)

Примечание

A [Toggle Button][1] имеет только два состояния: нормальное и вниз .Следовательно, вам не нужно два if оператора.Повысьте производительность своего приложения Kivy с помощью:

Замена

if state == "down":
    print("DOWN")
    sound.volume = .5
    sound.play()
if state == "normal":
    print("normal")
    sound.stop()

на:

print(state)
if state == "down":
    sound.volume = .5
    sound.play()
else:   # if state == "normal":
    sound.stop()
...