Форум сайта python.su
Друзья полюбил Python с первого раза
Помогите пожалуйста делаю простой MP3 плеер, да я знаю есть готовые решения но я хочу сам.
Так вот полазив по сайтам стыбзил GUI а вот как передать в мою функцию play выбранную директорию и имя файла по двойному клику в QListWidget не могу помогите пожалуйста новичку, заранее Вам благодарен.
import sys # sys нужен для передачи argv в QApplication import os # Отсюда нам понадобятся методы для отображения содержимого директорий import vlc #нужен для воспроизведения 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): 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(files): print (directory,files) #тут воспроизводим выбранный файл files из выбранной directory #p.stop #p = vlc.MediaPlayer(directory+"/"+files) #p.play() def main(): app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication window = ExampleApp() # Создаём объект класса ExampleApp window.show() # Показываем окно app.exec_() # и запускаем приложение if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем main() # то запускаем функцию main()
Отредактировано seregka174 (Фев. 19, 2019 16:52:12)
Офлайн
# Записываем путь к файлу item = QtGui.QTreeWidgetItem() item.setData(0, QtCore.Qt.UserRole, path) item.setText(0, file_name) self.listWidget.addItem(item) # Получаем путь к файлу item = self.listWidget.currentItem() path = item.data(0, QtCore.Qt.UserRole)
Офлайн
RodegastПодскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.
# Записываем путь к файлу item = QtGui.QTreeWidgetItem() item.setData(0, QtCore.Qt.UserRole, path) item.setText(0, file_name) self.listWidget.addItem(item) # Получаем путь к файлу item = self.listWidget.currentItem() path = item.data(0, QtCore.Qt.UserRole)
Офлайн
Ну с директорией разобрался почитав про инкопсуляцию локальные и глобальные переменные.
Осталось следующее не получается передать функции play по двойному клику то что я выбрал
Насколько я понимаю нужно поменять что то то тут:
self.listWidget.itemDoubleClicked.connect(self.play) #при двойном клике запустить функцию воспроизведения
import sys # sys нужен для передачи argv в QApplication import os # Отсюда нам понадобятся методы для отображения содержимого директорий import vlc #нужен для воспроизведения 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(files): print (files) print (directory+"/"+files) #тут воспроизводим выбранный файл files из выбранной directory #p.stop #p = vlc.MediaPlayer(directory+"/"+files) #p.play() def main(): app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication window = ExampleApp() # Создаём объект класса ExampleApp window.show() # Показываем окно app.exec_() # и запускаем приложение if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем main() # то запускаем функцию main()
Офлайн
> Подскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.
В методе browse_folder ты должен записать путь к файлу, а в методе play прочитать его.
Офлайн
Решение оказалось простым, всем спасибо:
sel = self.listWidget.selectedIndexes()[0] files = (sel.data())
Офлайн