在QFileDialog中记住路径和会话

1 投票
3 回答
1789 浏览
提问于 2025-04-18 18:27

每次我的应用程序重启时,打开的对话框总是指向工具的位置。

如果它能指向上次加载文件时使用的路径,那就方便多了。

我尝试设置了环境变量,但对话框还是打开在当前目录的路径。

代码:

def openFile():
    last_path = os.environ.get('LAST_PATH')  # if 'LAST_PATH' doesn't exist return None
    path, _ = QFileDialog.getOpenFileName(self, "Open text file", dir=last_path) 
    os.environ["LAST_PATH"] = os.path.dirname(path) # save path from where file is opened in QFileDialog to 'LAST_PATH'

    *other code*

上面的代码没有按我预期的那样工作。为什么呢?通过Python脚本设置的环境变量在应用程序关闭之前会一直存在吗?

3 个回答

2

试着把你的路径保存到一个文件里,在这个例子中,这个文件会放在你脚本所在的文件夹里。

def openFile():
    with open("directory_file.txt","rU") as openfile:
        last_path = openfile.read()
    path, _ = QFileDialog.getOpenFileName(self, "Open text file", dir=last_path)
    with open("directory_file.txt","w") as openfile:
        openfile.write(str(path)) # Common use to maek str(), because QFiledialog returns a Qstring
    <DoYourProcessing>

要使用这个功能,你需要在你的源代码目录下创建一个名为“directory_file.txt”的文件。你可以手动用记事本(或其他文本编辑器)创建,也可以用下面这段代码来创建:

def write_file(directory,string_to_write):
    with open(str(directory),"w") as openfile:
        openfile.write(string_to_write)

如果你之前没有初始化环境变量,这也可能是你代码不工作的原因。此外,对于像这样的简单事情,使用环境变量其实不是很方便。

3

我建议你看看 QSettings 这个东西,具体可以参考这个链接:http://srinikom.github.io/pyside-docs/PySide/QtCore/QSettings.html。我可以给你一个关于如何在 pyqt 中使用 QSettings 的例子,虽然我没试过 pySide,但我觉得用法应该差不多。

首先,你需要在启动应用程序时读取 QSettings。所以你要创建一个 QSettings 对象,然后读取一个叫“last_file”的参数。在你第一次运行程序时,这个变量是不存在的,所以它会返回“.”,这代表的是工具的目录。

settings = QSettings()
last_file_opened = settings.value("last_file", ".").toString()

当你选择文件时,你需要加上这段代码。

settings = QSettings()
settings.setValue("last_file", QVariant(QString('file_name')))

另外,在创建 QApplication 的时候设置这些参数也很重要。这会在内存中创建一个空间,用来保存这些设置。

app = QApplication(argv)
app.setOrganizationName("yourOrg")
app.setOrganizationDomain("yourOrgDomain")
app.setApplicationName("yourApplicationName")

希望这些对你有帮助。

0

Pyside的Qsettings格式

def openFile():
    settings = QSettings("Company name", "Application name")
    last_path = settings.value("LAST_PATH", ".")
    path, _ = QFileDialog.getOpenFileName(self, "Open text file", dir=last_path)
    self.settings.setValue("LAST_PATH", os.path.dirname(path))

撰写回答