PyQt5 вновь открывается в том же каталоге, который я посетил

Я использую getOpenFileName, чтобы открыть файл, у меня есть 3 класса, которые я связываю между ними в основном. Например,

Класс A () Класс B () Класс C () Главный ()

Главное - это окно с тремя нажимными кнопками: каждая кнопка вызывает один из трех классов, а каждая открывает другое окно, отвечающее за свою функцию; однако класс C отвечает за получение файлов из каталога.

Я хочу сделать так, чтобы getOpenFileName запоминал последний посещенный каталог даже после того, как я закрыл окно класса, но по-прежнему основной. другими словами, путь к файлу кэша, который я открыл в прошлый раз.

Код ниже для дополнительной иллюстрации.

Класс C():

def OpenFileX(self):
    self.file, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Single File', QtCore.QDir.rootPath() , '*.csv')
    self.textBrowserMS.setText(self.fileName)
    return self.fileName

def getfileOG(self):
    filePath, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Single File', QtCore.QDir.rootPath() , '*.csv')
    self.textBrowserOG.setText(filePath)
def getfileConfig(self):
    filePath, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Single File', QtCore.QDir.rootPath() , '*.csv')
    self.textEdit_config.setText(filePath) 

Основной класс

Import C
class analysis(QtWidgets.QMainWindow, C.Ui_Dialog):
    def __init__(self,parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        #self.ui = C.Ui_MainWindow()
        self.setupUi(self)

Любые идеи, как я могу это сделать

1 ответ

Вы должны сохранить последний путь в постоянной памяти, например, с помощью QSettings, и для этого вы должны установить setOrganizationName(), setOrganizationDomain() и setApplicationName().

from PyQt5 import QtCore, QtWidgets

class C(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(C, self).__init__(parent)
        self.te = QtWidgets.QTextEdit()
        button = QtWidgets.QPushButton("Press me")
        button.clicked.connect(self.on_clicked)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.te)
        lay.addWidget(button)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        settings = QtCore.QSettings()
        path = settings.value("Paths/csvfile", QtCore.QDir.rootPath())
        filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, 'Single File', path, '*.csv')
        if filename:
            self.te.setText(filename)
            finfo = QtCore.QFileInfo(filename)
            settings.setValue("Paths/csvfile", finfo.absoluteDir().absolutePath())

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.c = C()
        button = QtWidgets.QPushButton("Open C Dialog")
        button.clicked.connect(self.c.show)
        self.setCentralWidget(button)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    QtCore.QCoreApplication.setOrganizationName("MySoft")
    QtCore.QCoreApplication.setOrganizationDomain("mysoft.com")
    QtCore.QCoreApplication.setApplicationName("MyApp")
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
Другие вопросы по тегам