Найти - Пользователи
Полная версия: Не могу передать парамет по двойнуму клику в QlistWidget
Начало » Центр помощи » Не могу передать парамет по двойнуму клику в QlistWidget
1
seregka174
Друзья полюбил 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()
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)
seregka174
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)
Подскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.
seregka174
Ну с директорией разобрался почитав про инкопсуляцию локальные и глобальные переменные.
Осталось следующее не получается передать функции 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()
Rodegast
> Подскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.

В методе browse_folder ты должен записать путь к файлу, а в методе play прочитать его.
seregka174
Решение оказалось простым, всем спасибо:
 sel = self.listWidget.selectedIndexes()[0]
files = (sel.data())
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB