Remeber last saved directory with QFileDialog

Heads up! You've already completed this tutorial.

Santiago_Pineda | 2020-06-04 12:29:36 UTC | #1

I have a GUI with a field for file name ( self.ui.lineEditFileName) and I need that the file name goes automatically to the file name field in the QFileDialog and set it to always open in D:\Data. However I want to be able to get to the last directory location where the last file was saved.

If i remove the 3rd argument of the function this exactly what happens but then i lose the file name signal and the field is blank.

Thanks for any help.

fileName, _ = QFileDialog.getSaveFileName(self, "Save Measurement", 'D:\Data\' + self.ui.lineEditFileName.text(), "(*.csv)", options=options)


martin | 2020-06-04 20:59:10 UTC | #2

Hey @Santiago_Pineda welcome to the forum! [quote="Santiago_Pineda, post:1, topic:246"] Get it to always open in D:\Data. However I want to be able to get to the last directory location where the last file was saved. [/quote]

Do you mean that instead of going to D:\Data you want it to open at the last folder (if there is one)?

In that case what I would do is save the folder of the previous filename, e.g.

python
self.active_folder = os.path.dirname(fileName)

You can set self.active_folder = 'D:\Data\' by default if you like (or set it to None and check for this, defaulting to not passing anything in).

To use this you would then do --

python
path = os.path.join(self.active_folder, self.ui.lineEditFileName.text())
fileName, _ = QFileDialog.getSaveFileName(self, “Save Measurement”, path, “(*.csv)”, options=options)

Does that make sense? Let me know if I've misunderstood!


Santiago_Pineda | 2020-06-05 14:15:31 UTC | #3

Thanks for the reply. This is exactly what i meant. What was confusing is that if you replace the 3rd argument of the getSaveFileName method for the empty string "", then the dialog will remember the last directory every time I save, but of course i would lose the file name from my GUI lineEditFileName field. This is how it is working as I intended after your feedback:

In the init function (Note that the \ has to be escaped, otherwise it includes the directory path as part of the file name):

self.active_folder = 'D:\\Data\\'

In the save function:

python
path = os.path.join(self.active_folder, self.ui.lineEditFileName.text())
fileName, _ = QFileDialog.getSaveFileName(self, "Save Measurement", path, "(*.csv)", options=options)
self.active_folder = os.path.dirname(fileName)

Thanks again Martin


Over 10,000 developers have bought Create GUI Applications with Python & Qt!

To support developers in [[ countryRegion ]] I give a [[ localizedDiscount[couponCode] ]]% discount with the code [[ couponCode ]] — Enjoy!

For [[ activeDiscount.description ]] I'm giving a [[ activeDiscount.discount ]]% discount with the code [[ couponCode ]] — Enjoy!

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak