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 :

Qcompleter avec QFileSystemModel. comment fixer le path


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ptissendier
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 64
    Par défaut Qcompleter avec QFileSystemModel. comment fixer le path
    Bonjour,
    Je n'arrive pas à fixer le "root" de QFileSystemModel utilisé dans QCompleter.
    Voici mon code
    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
     
    import sys
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
     
    app = QApplication(sys.argv)
     
     
    # Utilsation de QCompleter : avec QFileSystemModel ================
     
    model1 = QFileSystemModel()
    #model1.setNameFilters(['*.pdf'])
    #model1.setNameFilterDisables(False)
    model1.setRootPath("/user/share/applications/") #Ne marche pas ?
     
     
    completer1 = QCompleter()
    completer1.setModel(model1)
    completer1.setMaxVisibleItems(10)
    completer1.setCaseSensitivity(0)
    #completer1.setModelSorting(QCompleter.CaseInsensitivelySortedModel)
     
     
    lineedit1 = QLineEdit()
    lineedit1.setWindowTitle("-> QFileSystemModel")
    lineedit1.setGeometry(400,400,350,25)
    #lineedit1.setFixedWidth(len(lineedit1.text())*20)
    lineedit1.setCompleter(completer1)
     
    lineedit1.show()
     
    sys.exit(app.exec_())
    Je voudrais également pouvoir trier les "entrées", le setModelSorting (ligne 22) ne marche pas non plus (il est sans doute mal placé).

    Merci de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Il me semble que le slash terminal en est la cause, essaye sans.

    Moi, j'utilise ceci:
    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
     
    class FilesBrowser(QTreeView):
        def __init__(self, main, root=None, parent=None):
            """Initiate the file browser widget.
     
            Args:
            main -- the Oqapy core instance
            root -- the root of the file system
            parent -- the parent widget
            """
            super().__init__(parent)
            self.main = main
            if root is None:
                root = os.path.expanduser("~")
     
            self.root = root.rstrip(os.path.sep)
            self.model = QFileSystemModel()
            self.model.setRootPath(self.root)
            self.sortByColumn(0, Qt.AscendingOrder)
            self.setModel(self.model)
            self.setAnimated(False)
            self.setIndentation(20)
            self.resize(400, 700)
            header = self.header()
            header.hide()
            for i in range(1, header.count()):
                self.hideColumn(i)
     
            idx = self.model.index(self.root)
            self.expand(idx)
            self.scrollTo(idx, QAbstractItemView.EnsureVisible)
    Copié-collé tel quel.

  3. #3
    Membre confirmé Avatar de ptissendier
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 64
    Par défaut
    Merci Vincent
    Même sans le slash ça ne marche pas. J'avais bien essayé avant de poser la question.
    Dans ton exemple tu passes par un QTreeView, je voudrais m'en passer.
    Je continue à piocher

  4. #4
    Membre confirmé Avatar de ptissendier
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 64
    Par défaut
    Bon j'ai trouvé ça https://doc.qt.io/qt-5/qtwidgets-too...r-example.html
    Mais j'ai du mal avec le C++
    Je pense que ça peut me servir, mais je suis incapable de le retranscrire en PyQt5. si quelque geek pouvait m'aider ce serait super juste pour le fun et plus si affinités

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour aider, il y a les exemples de PyQt5 fournis par riverbank. Pour les avoir, il faut télécharger les sources sur cette page:
    https://riverbankcomputing.com/software/pyqt/download

    Une fois téléchargé et décompressé, le répertoire tools\customcompleter contient l'exemple customcompleter.py. Lors de son exécution, on peut taper "sig" et le petit menu s'affiche, permettant de compléter par le mot sélectionné.

    Ces exemples sont intéressants mais ne sont malheureusement pas tous à jour de l'évolution de PyQt5 et c'est bien dommage (exemple: webkit n'existe plus).

  6. #6
    Membre confirmé Avatar de ptissendier
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 64
    Par défaut
    Encore merci Tyrtamos
    J'ai déjà installé ces exemples, j'avais oublié que je les avais
    J'ai écris un petit bout de code en toute modestie pour donner des exemples simples.
    Un grand merci à toi pour ton code de "recherche avancée" qui m'a bien aidé.
    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
    70
    71
    72
    73
    74
     
    import sys
    import os
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
     
    app = QApplication(sys.argv)
     
    # QCompleter avec une QStringListe ============================
     
    slmodel = QStringListModel()
    slmodel.setStringList(['rien', 'Rien','Mot', 'mes', 'moi', 'Dico', 'Mémé', 'mince'])
     
    listefichiers=os.listdir("/usr/share/applications/")
    listefichiers.sort()
    lfmodel=QStringListModel()
    lfmodel.setStringList(listefichiers)
     
    completer0= QCompleter()
    completer0.setMaxVisibleItems(10)
    completer0.setCaseSensitivity(0)
    completer0.setModel(lfmodel)
     
    lineedit0 = QLineEdit()
    lineedit0.setWindowTitle("-> QStringListModel")
    lineedit0.setGeometry(400,300,350,25)
    lineedit0.setCompleter(completer0)
    lineedit0.show()
     
    # QCompleter avec un QFileSystemModel ======================
     
    fsmodel = QFileSystemModel()
    monrep="/usr/share/applications/"
    fsmodel.setRootPath(monrep)
     
    completer1 = QCompleter()
    completer1.setMaxVisibleItems(10)
    completer1.setCaseSensitivity(0)
    completer1.setModel(fsmodel)
     
    lineedit1 = QLineEdit()
    lineedit1.setWindowTitle("-> QFileSystemModel")
    lineedit1.setGeometry(400,400,350,25)
    lineedit1.setCompleter(completer1)
    lineedit1.show()
     
    # QCompleter recherche avancée ===============================================
    # Merci à Tyrtamos
    # #https://www.developpez.net/forums/d1487017/autres-langages/python/gui/pyqt/configuration-d-qcompleter/
     
    # installe ln QSortFilterProxyModel qui s'insère entre le QCompleter et le modele
    proxymodel = QSortFilterProxyModel()
    proxymodel.setFilterCaseSensitivity(Qt.CaseInsensitive)
    proxymodel.setSourceModel(lfmodel)
     
    completer2 = QCompleter()
    completer2.setMaxVisibleItems(10)
    completer2.setCaseSensitivity(0)
    completer2.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
    completer2.setModelSorting(QCompleter.CaseInsensitivelySortedModel)
    completer2.setModel(proxymodel)
     
    lineedit2 = QLineEdit()
    lineedit2.setWindowTitle("-> Recherche avancée")
    lineedit2.setGeometry(400,500,350,25)
    lineedit2.setFocusPolicy(Qt.StrongFocus)
    lineedit2.setCompleter(completer2)
    lineedit2.textEdited.connect(proxymodel.setFilterFixedString)
    lineedit2.show()
     
    #=======================================================================
     
    sys.exit(app.exec_())
    En réalité mon souci était de choisir un fichier dans un répertoire. J'ai résolu mon problème en utilisant os.listdir()
    Je vais passer le fil à RESOLU bien que ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/03/2010, 09h30
  2. Comment fixer une date dans un champ !
    Par LATHIOS dans le forum Access
    Réponses: 8
    Dernier message: 17/06/2005, 19h44
  3. [DBGrid avec Cumul]Comment réaliser un cumul dans un DBGrid
    Par Eric SAULNIER dans le forum Bases de données
    Réponses: 2
    Dernier message: 21/07/2004, 17h56
  4. [debutant][Fichier] Comment obtenir le path de mon fichier ?
    Par Soulsurfer dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/06/2004, 17h09
  5. Comment integrer un path
    Par dinver dans le forum Linux
    Réponses: 3
    Dernier message: 07/04/2004, 17h16

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