Как выбрать путь для сохранения?

Как в этом коде выбрать путь для сохранения, например папку Downloads?

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
import os

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 221)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 801, 601))
        self.frame.setStyleSheet("background-color: rgb(27, 29, 35);")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(320, 20, 151, 41))
        self.label.setMinimumSize(QtCore.QSize(151, 41))
        self.label.setMaximumSize(QtCore.QSize(151, 41))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(24)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(255, 255, 255);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.input = QtWidgets.QLineEdit(self.frame)
        self.input.setGeometry(QtCore.QRect(40, 80, 721, 61))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(16)
        self.input.setFont(font)
        self.input.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.input.setText("")
        self.input.setAlignment(QtCore.Qt.AlignCenter)
        self.input.setObjectName("input")
        self.start = QtWidgets.QPushButton(self.frame)
        self.start.setGeometry(QtCore.QRect(250, 160, 131, 31))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(13)
        self.start.setFont(font)
        self.start.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.start.setObjectName("start")
        self.folder = QtWidgets.QPushButton(self.frame)
        self.folder.setGeometry(QtCore.QRect(410, 160, 151, 31))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(13)
        self.folder.setFont(font)
        self.folder.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.folder.setObjectName("folder")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.add_functions()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Ссылка"))
        self.start.setText(_translate("MainWindow", "Старт"))
        self.folder.setText(_translate("MainWindow", "Выбрать папку"))

    def add_functions(self):
        self.start.clicked.connect(lambda: self.start())
        self.folder.clicked.connect(lambda: self.open())

    def open(self):
        QFileDialog.getExistingDirectory(self, "Выберите путь", f"C:\\Users\\{os.getlogin()}")

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Выдаёт ошибку:

TypeError: getExistingDirectory(parent: QWidget = None, caption: str = '', directory: str = '', options: Union[QFileDialog.Options, QFileDialog.Option] = QFileDialog.ShowDirsOnly): argument 1 has unexpected type 'Ui_MainWindow'


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

Автор решения: joparez228

Не изменяйте код, сгенерированный Qt Designer. Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
import sys
import os

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 221)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.frame = QtWidgets.QFrame(self.centralwidget)
        self.frame.setGeometry(QtCore.QRect(0, 0, 801, 601))
        self.frame.setStyleSheet("background-color: rgb(27, 29, 35);")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.label = QtWidgets.QLabel(self.frame)
        self.label.setGeometry(QtCore.QRect(320, 20, 151, 41))
        self.label.setMinimumSize(QtCore.QSize(151, 41))
        self.label.setMaximumSize(QtCore.QSize(151, 41))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(24)
        self.label.setFont(font)
        self.label.setStyleSheet("color: rgb(255, 255, 255);")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.input = QtWidgets.QLineEdit(self.frame)
        self.input.setGeometry(QtCore.QRect(40, 80, 721, 61))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(16)
        self.input.setFont(font)
        self.input.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.input.setText("")
        self.input.setAlignment(QtCore.Qt.AlignCenter)
        self.input.setObjectName("input")
        self.start = QtWidgets.QPushButton(self.frame)
        self.start.setGeometry(QtCore.QRect(250, 160, 131, 31))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(13)
        self.start.setFont(font)
        self.start.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.start.setObjectName("start")
        self.folder = QtWidgets.QPushButton(self.frame)
        self.folder.setGeometry(QtCore.QRect(410, 160, 151, 31))
        font = QtGui.QFont()
        font.setFamily("Montserrat SemiBold")
        font.setPointSize(13)
        self.folder.setFont(font)
        self.folder.setStyleSheet("background-color: rgb(37, 39, 48);\n"
"color: #ffffff;\n"
"border-radius: 10px;")
        self.folder.setObjectName("folder")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "Ссылка"))
        self.start.setText(_translate("MainWindow", "Старт"))
        self.folder.setText(_translate("MainWindow", "Выбрать папку"))



#### новый класc###
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):     
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.add_functions()

    def add_functions(self):
        self.start.clicked.connect(lambda: self.start())### ваша логика
        self.folder.clicked.connect(lambda: self.open())

    def open(self):
        QFileDialog.getExistingDirectory(self, "Выберите путь", "C:\\Users\\{os.getlogin()}")


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    #   uw = Ui_MainWindow()                                      # ---                           # +++
    w.show()
    sys.exit(app.exec())
→ Ссылка