Как задать функцию для приложения, чтобы файлы брались по выбранной ранее директории?

Как задать функцию в приложение, чтобы при нажатии второй кнопки выполнялось действие над файлами, путь к которым мы выбирали по нажатию первой кнопки?

class Convert_App(QtWidgets.QMainWindow, ui_window.Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btn_choose.clicked.connect(self.choose)
        self.btn_convert.clicked.connect(self.convert)

    def choose(self):
        self.listWidget.clear()
        directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Выберите папку")

        if directory:
            for file_name in os.listdir(directory):
                self.listWidget.addItem(file_name)

    def convert(self):
        dirname = '/path/to/image/'
        imgs = []
        for fname in os.listdir(dirname):
            if not fname.endswith(".jpg"):
                continue
            path = os.path.join(dirname, fname)
            if os.path.isdir(path):
                continue
            imgs.append(path)
        with open("name.pdf", "wb") as f:
            f.write(img2pdf.convert(imgs))

Ответы (1 шт):

Автор решения: S. Nick

Создайте переменную self.directory как атрибут класса и работайте с ней.

import sys
import os
import img2pdf
from PyQt5 import  QtGui, QtWidgets, QtCore
from PyQt5.Qt import *


class Convert_App(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralWidget = QtWidgets.QWidget()        
        self.setCentralWidget(self.centralWidget)
        
        self.directory = None                                        # +++
        
        self.listWidget = QListWidget()
        
        self.btn_choose = QPushButton('Choose')
        self.btn_convert = QPushButton('Convert')

        self.btn_choose.clicked.connect(self.choose)
        self.btn_convert.clicked.connect(self.convert)
        
        layout = QGridLayout(self.centralWidget)
        layout.addWidget(self.listWidget, 0, 0, 1, 2)
        layout.addWidget(self.btn_choose, 1, 0)
        layout.addWidget(self.btn_convert, 1, 1)

    def choose(self):
        self.listWidget.clear()
        self.directory = QtWidgets.QFileDialog.getExistingDirectory(
            self, 
            "Выберите папку"
        )

        if self.directory:
            for file_name in os.listdir(self.directory):
                self.listWidget.addItem(file_name)

    def convert(self):
# -       dirname = '/path/to/image/'
        if not self.directory:                                       # +++
            msg = QMessageBox.information(
                self, 
                'Внимание', 
                'Выберите пожалуйста каталог.'
            )
            return
        
        imgs = []
        for fname in os.listdir(self.directory):                     # + self.directory
            if not fname.endswith(".jpg"):
                continue
            path = os.path.join(self.directory, fname)               # + self.directory
            if os.path.isdir(path):
                continue
            imgs.append(path)
            
        with open("name_pdf.pdf", "wb") as f:
            f.write(img2pdf.convert(imgs))
            
        msg = QMessageBox.information(
            self, 
            'Успех', 
            'Конвертация закончена, проверьте "name_pdf.pdf".'
        )  
  
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle(QStyleFactory.create("Fusion"))
    w = Convert_App()
    w.resize(700, 400)
    w.show()
    sys.exit(app.exec_()) 

введите сюда описание изображения

→ Ссылка