Как задать функцию для приложения, чтобы файлы брались по выбранной ранее директории?
Как задать функцию в приложение, чтобы при нажатии второй кнопки выполнялось действие над файлами, путь к которым мы выбирали по нажатию первой кнопки?
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_())
