Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2019 08:31:51

seregka174
Зарегистрирован: 2015-02-03
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

Всем приветы!
Пытаю свои силы в Python хочу MP3 плеер забубенить выбор пал на python-vlc
Подсобите решить следующую проблему на PuQt сделал выбор папки с получением списка что в ней и по двойному клику выбирая файл запускается воспроизведение все ок, но вот беда если запустить вторую то первая не останавливается в воспроизведение а играет в фоне, и так сколько не запускаю все играют одновременно

 #функция воспроизведения              
    def play(self):
        sel = self.listWidget.selectedIndexes()[0]
        files = (sel.data())
        self.statusBar.showMessage(files)
        #тут воспроизводим выбранный файл files из выбранной directory
        player = vlc.MediaPlayer(directory+"/"+files)
        player.stop()#остановить преъидущее воспроизведение
        player.play()

Вот полный код:
 import vlc
import sys  # sys нужен для передачи argv в QApplication
import os  # Отсюда нам понадобятся методы для отображения содержимого директорий
from PyQt5 import QtWidgets
import design  # Это наш конвертированный файл дизайна
class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
		# Это здесь нужно для доступа к переменным, методам
		# и т.д. в файле design.py
        super().__init__()
        self.setupUi(self)  # Это нужно для инициализации нашего дизайна
        self.btnBrowse.clicked.connect(self.browse_folder)  # Выполнить функцию browse_folder
                                                            # при нажатии кнопки
        self.listWidget.itemDoubleClicked.connect(self.play) #при двойном клике запустить функцию воспроизведения
        
    def browse_folder(self):
        global directory#объявляем переменную глобальной
        self.listWidget.clear()  # На случай, если в списке уже есть элементы
        directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")
        # открыть диалог выбора директории и установить значение переменной
        # равной пути к выбранной директории
        if directory:  # не продолжать выполнение, если пользователь не выбрал директорию
            for file_name in os.listdir(directory):  # для каждого файла в директории
                self.listWidget.addItem(file_name)   # добавить файл в listWidget
  
#функция воспроизведения              
    def play(self):
        sel = self.listWidget.selectedIndexes()[0]
        files = (sel.data())
        self.statusBar.showMessage(files)
        #тут воспроизводим выбранный файл files из выбранной directory
        player = vlc.MediaPlayer(directory+"/"+files)
        player.stop()#остановить преъидущее воспроизведение
        player.play()
        
def main():
    app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
    window = ExampleApp()  # Создаём объект класса ExampleApp
    window.show()  # Показываем окно
    app.exec_()  # и запускаем приложение
if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
    main()  # то запускаем функцию main()



После знакомства с Linux заколотил все форточки.

Отредактировано seregka174 (Фев. 21, 2019 08:32:08)

Офлайн

#2 Фев. 21, 2019 09:07:19

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

Попробую предположить, что нужно как-то так

 class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.player = None 
    def play(self):
        sel = self.listWidget.selectedIndexes()[0]
        files = (sel.data())
        self.statusBar.showMessage(files)
        if self.player:
             self.player.stop() 
        self.player = vlc.MediaPlayer(directory+"/"+files)
        self.player.play()



Офлайн

#3 Фев. 21, 2019 09:16:53

seregka174
Зарегистрирован: 2015-02-03
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

FishHook
Попробую предположить, что нужно как-то так
Попробовал что то просто открывается маленькое пустое окошечко и все, а моего с выбором директории нет



После знакомства с Linux заколотил все форточки.

Отредактировано seregka174 (Фев. 21, 2019 09:17:08)

Офлайн

#4 Фев. 21, 2019 09:23:32

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

seregka174
Не трудно догадаться, что я вам дал не ПОЛНОСТЬЮ РАБОЧИЙ код, а показал места, в которых нужно сделать изменения. Одна строка новая появится у вас в __init__ и несколько в play.



Офлайн

#5 Фев. 21, 2019 09:31:26

seregka174
Зарегистрирован: 2015-02-03
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

FishHook
seregka174Не трудно догадаться, что я вам дал не ПОЛНОСТЬЮ РАБОЧИЙ код, а показал места, в которых нужно сделать изменения. Одна строка новая появится у вас в __init__ и несколько в play.
SUPER !!!! Все работает, спасибо!
А если не трудно можете написать (наводку что почитать) почему так происходило, заранее спасибо огроменное!



После знакомства с Linux заколотил все форточки.

Офлайн

#6 Фев. 21, 2019 09:56:53

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проблема с воспроизведением в python-vlc

seregka174
А если не трудно можете написать (наводку что почитать) почему так происходило, заранее спасибо огроменное!

Да какие тут наводки
Я просто предположил, что vlc.MediaPlayer(directory+“/”+files) создает новый объект типа МедиаПлейер. Ну и получается, что вы

        player = vlc.MediaPlayer(directory+"/"+files)
player.stop()
player.play()

1) Создаете новый плейер
2) Останавливаете ЕГО
3) Запускаете ЕГО

К СТАРОМУ плейеру вы вообще никак не обращаетесь. Надо его сохранять в какой-то переменной, чтобы можно было получить к нему доступ.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version