记住QFileDialog中的会话路径

时间:2014-08-25 16:51:15

标签: python qt pyside

每当我的应用程序重新启动时,打开的对话框始终指向工具位置。

如果它指向用于加载文件的最后位置,那将会更有用。

我尝试设置环境变量,但它仍会打开包含当前dir路径的对话框

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 个答案:

答案 0 :(得分:1)

尝试将路径保存到文件中,该文件位于脚本目录中。

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)

您之前没有初始化环境变量也可能是您的代码无效的原因。 此外,对于像这样的微小事情使用环境变量是相当不方便的。

答案 1 :(得分:1)

我建议你看看QSettings http://srinikom.github.io/pyside-docs/PySide/QtCore/QSettings.html。 我可以举例说明如何在pyqt中使用QSettings,我从不尝试pySide,但我认为它非常相似。

首先,您需要在启动应用程序时阅读QSettings。所以创建一个QSetting 对象然后读取名为&#34; last_file&#34;的参数。在您的计划的第一次运行, 此变量不存在,因此它将返回&#34;。&#34;这是工具目录

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")

我希望它有所帮助

答案 2 :(得分: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))