在QFileDialog中记住路径和会话
每次我的应用程序重启时,打开的对话框总是指向工具的位置。
如果它能指向上次加载文件时使用的路径,那就方便多了。
我尝试设置了环境变量,但对话框还是打开在当前目录的路径。
代码:
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))