Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 19, 2019 16:46:30

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

Не могу передать парамет по двойнуму клику в QlistWidget

Друзья полюбил 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()



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

Отредактировано seregka174 (Фев. 19, 2019 16:52:12)

Офлайн

#2 Фев. 19, 2019 19:42:01

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Не могу передать парамет по двойнуму клику в QlistWidget

 # Записываем путь к файлу
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)



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Фев. 19, 2019 19:54:27

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

Не могу передать парамет по двойнуму клику в QlistWidget

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)
Подскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.



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

Офлайн

#4 Фев. 19, 2019 21:02:17

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

Не могу передать парамет по двойнуму клику в QlistWidget

Ну с директорией разобрался почитав про инкопсуляцию локальные и глобальные переменные.
Осталось следующее не получается передать функции 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()



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

Офлайн

#5 Фев. 20, 2019 17:09:22

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2763
Репутация: +  185  -
Профиль   Отправить e-mail  

Не могу передать парамет по двойнуму клику в QlistWidget

> Подскажите пожалуйста куда это именно вставлять я с функциями вот только знакомлюсь просто.

В методе browse_folder ты должен записать путь к файлу, а в методе play прочитать его.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Фев. 20, 2019 18:06:13

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

Не могу передать парамет по двойнуму клику в QlistWidget

Решение оказалось простым, всем спасибо:

 sel = self.listWidget.selectedIndexes()[0]
files = (sel.data())



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version