IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PyQt Python Discussion :

Rouvrir le dernier répertoire ouvert [PyQt5]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut Rouvrir le dernier répertoire ouvert [PyQt5]
    Bonjour,

    N'ayant pas trouvé de thread approprié, je me suis mis sur celui-ci.

    Voilà mon problème: je code sous PyQt5 et je dois faire en sorte que lorsqu'un utilisateur utilise un QopenFileDialog, le chemin du dernier fichier utilisé soit sauvegardé.

    Le problème est qu'après quelques semaines de recherches, je ne suis arrivé à rien de concluant (je suis débutant).

    J'ai donc fait en sorte de ne pas utilser le 'dialog natif', car il semblerait que ce soit pour ça qu'on ne puisse pas réussir à enregistrer le chemin...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     csv_file_list = QtWidgets.QFileDialog.getOpenFileName(self, 'Open File', '', 'Csv Files (*.csv)', None,  QtWidgets.QFileDialog.DontUseNativeDialog)
    J'ai essayé diverses choses que je vous met ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
            csv_file_list = QtWidgets.QFileDialog.getSaveFileName(self, 'Dialog Title', '/path/to/default/directory', selectedFilters='*.txt')
            if csv_file_list:
                print (csv_file_list)
     
            theInputDir = ''
     
            if os.path.exists(configFile):
                config = ConfigParser.ConfigParser()
                config.read(configFile)
                if config.has_sections('dirs'):
                    if config.has_option('dirs',  'inputdir'):
                        theInputDir = config.get('dirs',  'inputdir')
            csv_file_list = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', '', '*.csv')
            if csv_file_list:
                self.lineEditInputFile.setText(csv_file_list)
                inputDirName = os.path.dirname(csv_file_list.ascii())
                self.textEditInfo.append('Inpu Dir : ' + inputDirName)
                #Write the directory to the config file for the next time
                config = ConfigParser.ConfigParser()
                config.read(configFile)
                if not config.has_sections('dirs'):
                    config.add_sections('dirs')
                config.set('dirs',  'inpudir',  inputDirName)
                fpConf = open(configFile,  'w') #configFile is global
                config.write(fpConf)
                fpConf.close()
     
            ##
            save = QtWidgets.QFileDialog.saveState(self)
            QtWidgets.QFileDialog.resaveState(save)
            if self.QFileDialog.restoreState(dir_path) == true:
                csv_file_list = 
     
            ##
            settings = QSettings()
            self.recentFiles = settings.value("RecentFiles").toStringList()
            settings.value("Recent files").toStringList
            size = settings.value("MainWindow/Size",  QSize(800,  600)).toSize()
            self.resize(size)
            self.restoreState(settings.value("MainWindow/State").toByteArray())
            self.setWindowTitle("Mobility Data Display - " + dir_path) 
            self.updateFileMenu()
            QTimer.SingleShot(0,  self.loadInitialFile)
     
            ##
            settings = QSettings(dir_path,  "docs")   
            settings.value("toto")
     
            ##Non native Dialog first attempt
            csv_file_list = QtWidgets.QFileDialog.getOpenFileName(self, 'Open file', '', '*.csv'),None,  QtWidgets.QFileDialog.DontUseNativeDialog)
     
     
            ##Non native Dialog second attempt
            dialog = QtWidgets.QFileDialog(self)
            dialog.setWindowTitle('Open File')
            dialog.setNameFilter('*.csv')
            dialog.setFileMode(QtWidgets.QFileDialog.ExistingFile)
            if dialog.exec_() == QtWidgets.QDialog.Accepted:
                csv_file_list = dialog.selectedFiles()[0]
    Ca fait beaucoup mais je n'ai pas chômé !

    Je pensais aussi stocker le chemin du dernier fichier utilisé dans un .txt et le réutiliser derrière mais je ne sais tout simplement pas comment m'y prendre ...


    Si vous avez une solution ou juste un début je suis preneur !!

    Merci par avance !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 775
    Par défaut
    Salut,

    oui en effet, votre code est laborieux...
    Simplifions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import os
    from PyQt5.QtWidgets import QApplication, QFileDialog
    from PyQt5.QtCore import QSettings
     
    DEFAULT_DIRECTORY = '.'
     
    app = QApplication([])
     
    settings = QSettings(QSettings.IniFormat, QSettings.UserScope, 'MyOrg', application='MyApp', )
    cdir = settings.value('current_directory', DEFAULT_DIRECTORY, type=str )
    fullname, _ = QFileDialog.getOpenFileName(None, 'Open File', cdir, 'Csv Files (*.csv)', None,  QFileDialog.DontUseNativeDialog)
    cdir = os.path.split(fullname)[0] or DEFAULT_DIRECTORY
    settings.setValue('current_directory', cdir)
     
    app.exec_()


    Par défaut, le répertoire sera DEFAULT_DIRECTORY ou la valeur qu'on récupère via QSettings dans "cdir".
    Il suffit de passer ce répertoire à QFileDialog.getOpenFileName.
    Et de le sauvegarder pour le coup suivant.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut Merci !
    Salut,

    Merci ! Je vais de ce pas essayer

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut Des petites erreurs..
    Re, après plusieurs tests infructeux, j'en viens à penser que je ne vous ai pas tout dis

    C'est une fonction (normal) mais je n'ai pas tout écris, je vous met donc l'ensemble de la fonction (parce que y'a un truc qui foire après)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    def openandPlot(self,  parent):
            # All values should be set before loading a data file. Check if it is the case.
            try: 
                params = self.validate_param()
            except ValueError :
                self.statusbar.showMessage('Invalid value for parameters.')
                raise
            self.statusbar.showMessage('Opening file')
     
            ##I'm trying to save the folder when the user quit the software
     
            DEFAULT_DIRECTORY = '.'         
            settings = QSettings(QSettings.IniFormat, QSettings.UserScope, 'MyOrg', application='PickApex3D', )
            cdir = settings.value('current_directory', DEFAULT_DIRECTORY, type=str )
            csv_file_list, _ = QFileDialog.getOpenFileName(None, 'Open File', cdir, 'Csv Files (*.csv)')
            cdir =DEFAULT_DIRECTORY#! os.path.split(csv_file_list)[0] or 
            settings.setValue('current_directory', cdir)
     
            if len(csv_file_list) > 2 :
                # Output a warning that we will not handle more than one file.
                self.statusbar.showMessage('Only opening the first file.')
            csv_file = csv_file_list[0]
     
            #fileName on window title bar
            dir_path = os.path.basename(csv_file)
            self.setWindowTitle("Mobility Data Display - " + dir_path)
     
            if csv_file == '' :
                self.statusbar.showMessage('Ready')
                return True
            self.data = CCS_Data()
            try:
                self.data.read(csv_file)
            except:
                self.statusbar.showMessage('Error reading file: ' + csv_file)
                return True
            try:
                self.data.process(params)
            except KeyError:
                self.statusbar.showMessage('Error processing file: ' + csv_file)
                raise
            if self.data.num_points() == 0:
                self.statusbar.showMessage('No matching data points found in:'
                + csv_file)
                return True         
            self.fig.clear()
            self.plotLayers = [0]
            self.currentSeries = 1
            self.ax  = self.fig.add_subplot(111)
            self.data.plot(self.ax)
            print(locale.getlocale(category=locale.LC_NUMERIC))
            print("3" + locale.localeconv()['decimal_point'])
            self.fig.canvas.mpl_connect('pick_event', self.onpick)
            print(locale.getlocale(category=locale.LC_NUMERIC))
            print("4" + locale.localeconv()['decimal_point'])
            self.canvas.draw()
            print(locale.getlocale(category=locale.LC_NUMERIC))
            print("5" + locale.localeconv()['decimal_point'])
     
            # Make the selectSeries spinBox active and set its initial value as its limits to 
            # sensible values.
            self.selectSeries.setEnabled(True)
            self.selectSeries.setMinimum(1)
            self.selectSeries.setMaximum(1)
            self.selectSeries.setValue(1)
            # Initialize the output values for the series.
            print(locale.getlocale(category=locale.LC_NUMERIC))
            print(locale.localeconv()['decimal_point'])
            self.updateSeriesTable()
    Voilà ! Je pense que c'est plus clair maintenant.
    En fait en ouvrant mon fichier, j'ai une erreur de lecture (que je laisse ou pas le nonNativeDialog !)

    Si vous avez un début de solution, je suis preneur !

    Merci par avance

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 775
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 775
    Par défaut
    Salut,

    Citation Envoyé par qrkedrille Voir le message
    Voilà ! Je pense que c'est plus clair maintenant.
    En fait en ouvrant mon fichier, j'ai une erreur de lecture (que je laisse ou pas le nonNativeDialog !)
    Vous avez quoi comme "erreur de lecture"? Soyez plus précis: postez le traceback s'll y en a un...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut
    En fait, il n'y a pas d'erreurs dans le shell.


    C'est cette partie du code qui génère l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     try:
                self.data.read(csv_file)
            except:
                self.statusbar.showMessage('Error reading file: ' + csv_file)
                return True
    Le message s'affichant est le suivant :
    "Error reading file: C

Discussions similaires

  1. [JFileChooser] Se rappeler du dernier dossier ouvert
    Par bellemlih dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 31/03/2008, 19h45
  2. Réponses: 23
    Dernier message: 25/04/2007, 16h36
  3. [VB]récupérer le dernier chemin ouvert avec commondialog
    Par bhaal76 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 14/02/2006, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo