Получение значения всех пользовательских вводов / строк

Я ищу способ получить значение или текст всех пользовательских вводов / строк приложения

Я создаю приложение, которое одновременно создает несколько папок. Есть несколько пользовательских входов для записи в имени папок, которые я создаю, вызывая одну и ту же функцию несколько раз. Использование этого «self.le2.text ()» позволяет получить значение только первого созданного пользовательского ввода.

Вот мой код. По сути, я хочу, чтобы кнопка «создать папки» создавала все папки из всех пользовательских входов, созданных функцией «new_folder». Сейчас он получает только ценность первого созданного.

      import sys
import os

from PySide6 import QtWidgets, QtCore, QtGui
from PySide6.QtWidgets import QApplication


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):

        super(MainWindow, self).__init__()
        #set central widget and layout
        self.setWindowTitle("Amazing Folder Generator")
        self.generalLayout = QtWidgets.QVBoxLayout()
        self.centralWidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralWidget)
        self.centralWidget.setLayout(self.generalLayout)
        self.le1 = QtWidgets.QLineEdit()

        self.file_path()

        self.button1 = QtWidgets.QPushButton("New Folder")
        self.generalLayout.addWidget(self.button1)
        self.button1.pressed.connect(self.new_folder)

        self.button2 = QtWidgets.QPushButton("Create Folders")
        self.generalLayout.addWidget(self.button2)
        self.button2.pressed.connect(self.create_files)

        self.new_folder()
        self.new_folder()
        self.new_folder()


    def file_path(self):
        self.le1 = QtWidgets.QLineEdit()
        self.le1.setFixedHeight(20)
        self.le1.setAlignment(QtCore.Qt.AlignRight)
        self.path_layout = QtWidgets.QFormLayout()
        self.path_layout.addRow("Folder Path: ", self.le1)
        self.generalLayout.addLayout(self.path_layout)


    def new_folder(self):
        self.le2 = QtWidgets.QLineEdit()
        self.le2.setFixedHeight(20)
        self.le2.setAlignment(QtCore.Qt.AlignRight)
        self.path_layout = QtWidgets.QFormLayout()
        filename = "File: "
        self.path_layout.addRow(filename, self.le2)
        self.generalLayout.addLayout(self.path_layout)


    def create_files(self):
        path = self.le1.text() + "\\"
        filename = self.le2.text()
        newpath = path + filename
        if not os.path.exists(newpath):
            os.makedirs(newpath)

        else:
            print("folder already exists")


def main():
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

1 ответ

Простое решение - сохранить QLineEdits в списке, а затем выполнить итерацию для получения текста. В этом случае я переписал ваш код, чтобы он был более читабельным.

      import sys
import os
import os.path

from PySide6 import QtWidgets, QtCore, QtGui


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setWindowTitle("Amazing Folder Generator")

        self.folder_le = QtWidgets.QLineEdit(alignment=QtCore.Qt.AlignRight)
        self.folder_le.setFixedHeight(20)
        self.add_row_button = QtWidgets.QPushButton("New Folder")
        self.create_button = QtWidgets.QPushButton("Create Folders")
        self.files_layout = QtWidgets.QFormLayout()

        central_widget = QtWidgets.QWidget()
        self.setCentralWidget(central_widget)
        self.form_layout = QtWidgets.QFormLayout(central_widget)
        self.form_layout.addRow("Folder Path:", self.folder_le)
        self.form_layout.addRow(self.add_row_button)
        self.form_layout.addRow(self.create_button)
        self.form_layout.addRow(self.files_layout)

        self._files_le = []

        self.add_row_button.clicked.connect(self.add_row)
        self.create_button.clicked.connect(self.create_files)

        for _ in range(3):
            self.add_row()

    @property
    def folder(self):
        return self.folder_le.text()

    @property
    def filenames(self):
        return [le.text() for le in self._files_le]

    def add_row(self):
        le = QtWidgets.QLineEdit(alignment=QtCore.Qt.AlignRight)
        le.setFixedHeight(20)
        self.files_layout.addRow("File:", le)
        self._files_le.append(le)

    def create_files(self):
        for filename in self.filenames:
            newpath = os.path.join(self.folder, filename)
            if not os.path.exists(newpath):
                os.makedirs(newpath)
        else:
            print("folder already exists")


def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
Другие вопросы по тегам