PyQt5在我访问的同一目录上重新打开

2024-09-25 18:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我用getOpenFileName打开文件,我有3个类,我在它们之间绑定在main中。例如

Class A () Class B () Class C () Main()

主it显示窗口,有三个按钮:每个按钮调用三个类中的一个,每个按钮打开另一个负责自己功能的窗口;而C类负责从目录中获取文件。在

我想做的是让getOpenFileName记住上次访问的目录,即使我关闭了类的窗口,但是main仍然在运行。换句话说,就是我上次打开的缓存文件路径。在

下面的代码提供更多说明。在

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) 

主要班级

^{pr2}$

你知道我怎么做吗


Tags: 文件csvselfdef按钮classfilesingle
1条回答
网友
1楼 · 发布于 2024-09-25 18:23:01

您必须将最后一条路径保存在永久内存中,例如使用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_())

相关问题 更多 >