PySide: QFileSystemModel - Display/Show Root Item












0















i am using QFileSystemModel to display subdirectories of a set root path in a QTreeView. Works all fine but it would be very nice to also see the Root item as it is hidden right now.



model = QtGui.QFileSystemModel()
model.setRootPath(path)

treeview.setModel(model)
treeview.setRootIndex(model.index(path))
treeview.show()


EDIT: OS is Windows 7










share|improve this question

























  • i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

    – zwusel
    Nov 26 '18 at 8:35













  • Seems to work quite nicely. Ty very much!

    – zwusel
    Nov 29 '18 at 8:54











  • ahh...sadly it does not work if the root path has no parent

    – zwusel
    Nov 29 '18 at 9:00
















0















i am using QFileSystemModel to display subdirectories of a set root path in a QTreeView. Works all fine but it would be very nice to also see the Root item as it is hidden right now.



model = QtGui.QFileSystemModel()
model.setRootPath(path)

treeview.setModel(model)
treeview.setRootIndex(model.index(path))
treeview.show()


EDIT: OS is Windows 7










share|improve this question

























  • i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

    – zwusel
    Nov 26 '18 at 8:35













  • Seems to work quite nicely. Ty very much!

    – zwusel
    Nov 29 '18 at 8:54











  • ahh...sadly it does not work if the root path has no parent

    – zwusel
    Nov 29 '18 at 9:00














0












0








0








i am using QFileSystemModel to display subdirectories of a set root path in a QTreeView. Works all fine but it would be very nice to also see the Root item as it is hidden right now.



model = QtGui.QFileSystemModel()
model.setRootPath(path)

treeview.setModel(model)
treeview.setRootIndex(model.index(path))
treeview.show()


EDIT: OS is Windows 7










share|improve this question
















i am using QFileSystemModel to display subdirectories of a set root path in a QTreeView. Works all fine but it would be very nice to also see the Root item as it is hidden right now.



model = QtGui.QFileSystemModel()
model.setRootPath(path)

treeview.setModel(model)
treeview.setRootIndex(model.index(path))
treeview.show()


EDIT: OS is Windows 7







python pyside qtreeview qfilesystemmodel






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 22 '18 at 17:59









eyllanesc

80.6k103258




80.6k103258










asked Nov 22 '18 at 12:26









zwuselzwusel

568




568













  • i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

    – zwusel
    Nov 26 '18 at 8:35













  • Seems to work quite nicely. Ty very much!

    – zwusel
    Nov 29 '18 at 8:54











  • ahh...sadly it does not work if the root path has no parent

    – zwusel
    Nov 29 '18 at 9:00



















  • i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

    – zwusel
    Nov 26 '18 at 8:35













  • Seems to work quite nicely. Ty very much!

    – zwusel
    Nov 29 '18 at 8:54











  • ahh...sadly it does not work if the root path has no parent

    – zwusel
    Nov 29 '18 at 9:00

















i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

– zwusel
Nov 26 '18 at 8:35







i was not able to test it yet...i will tell you asap ;) (waiting for my IDE - IT messed something up on friday^^)

– zwusel
Nov 26 '18 at 8:35















Seems to work quite nicely. Ty very much!

– zwusel
Nov 29 '18 at 8:54





Seems to work quite nicely. Ty very much!

– zwusel
Nov 29 '18 at 8:54













ahh...sadly it does not work if the root path has no parent

– zwusel
Nov 29 '18 at 9:00





ahh...sadly it does not work if the root path has no parent

– zwusel
Nov 29 '18 at 9:00












1 Answer
1






active

oldest

votes


















1














The idea is to use as root the parent directory and filter the sibling directories, for this I created a QSortFilterProxyModel that receives an index from the desired directory but you must pass it a QPersistentModelIndex since the latter is permanent unlike the QModelIndex that can be changed in any moment.



import os
from PySide import QtCore, QtGui

class FileProxyModel(QtGui.QSortFilterProxyModel):
def setIndexPath(self, index):
self._index_path = index
self.invalidateFilter()

def filterAcceptsRow(self, sourceRow, sourceParent):
if hasattr(self, "_index_path"):
ix = self.sourceModel().index(sourceRow, 0, sourceParent)
if self._index_path.parent() == sourceParent and self._index_path != ix:
return False
return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)

if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
path = # ...
parent_dir = os.path.abspath(os.path.join(path, os.pardir))
treeview = QtGui.QTreeView()
model = QtGui.QFileSystemModel(treeview)
model.setRootPath(QtCore.QDir.rootPath())
proxy = FileProxyModel(treeview)
proxy.setSourceModel(model)
proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
treeview.setModel(proxy)
treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
treeview.expandAll()
treeview.show()
sys.exit(app.exec_())





share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430989%2fpyside-qfilesystemmodel-display-show-root-item%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    The idea is to use as root the parent directory and filter the sibling directories, for this I created a QSortFilterProxyModel that receives an index from the desired directory but you must pass it a QPersistentModelIndex since the latter is permanent unlike the QModelIndex that can be changed in any moment.



    import os
    from PySide import QtCore, QtGui

    class FileProxyModel(QtGui.QSortFilterProxyModel):
    def setIndexPath(self, index):
    self._index_path = index
    self.invalidateFilter()

    def filterAcceptsRow(self, sourceRow, sourceParent):
    if hasattr(self, "_index_path"):
    ix = self.sourceModel().index(sourceRow, 0, sourceParent)
    if self._index_path.parent() == sourceParent and self._index_path != ix:
    return False
    return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)

    if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    path = # ...
    parent_dir = os.path.abspath(os.path.join(path, os.pardir))
    treeview = QtGui.QTreeView()
    model = QtGui.QFileSystemModel(treeview)
    model.setRootPath(QtCore.QDir.rootPath())
    proxy = FileProxyModel(treeview)
    proxy.setSourceModel(model)
    proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
    treeview.setModel(proxy)
    treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
    treeview.expandAll()
    treeview.show()
    sys.exit(app.exec_())





    share|improve this answer




























      1














      The idea is to use as root the parent directory and filter the sibling directories, for this I created a QSortFilterProxyModel that receives an index from the desired directory but you must pass it a QPersistentModelIndex since the latter is permanent unlike the QModelIndex that can be changed in any moment.



      import os
      from PySide import QtCore, QtGui

      class FileProxyModel(QtGui.QSortFilterProxyModel):
      def setIndexPath(self, index):
      self._index_path = index
      self.invalidateFilter()

      def filterAcceptsRow(self, sourceRow, sourceParent):
      if hasattr(self, "_index_path"):
      ix = self.sourceModel().index(sourceRow, 0, sourceParent)
      if self._index_path.parent() == sourceParent and self._index_path != ix:
      return False
      return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)

      if __name__ == '__main__':
      import sys
      app = QtGui.QApplication(sys.argv)
      path = # ...
      parent_dir = os.path.abspath(os.path.join(path, os.pardir))
      treeview = QtGui.QTreeView()
      model = QtGui.QFileSystemModel(treeview)
      model.setRootPath(QtCore.QDir.rootPath())
      proxy = FileProxyModel(treeview)
      proxy.setSourceModel(model)
      proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
      treeview.setModel(proxy)
      treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
      treeview.expandAll()
      treeview.show()
      sys.exit(app.exec_())





      share|improve this answer


























        1












        1








        1







        The idea is to use as root the parent directory and filter the sibling directories, for this I created a QSortFilterProxyModel that receives an index from the desired directory but you must pass it a QPersistentModelIndex since the latter is permanent unlike the QModelIndex that can be changed in any moment.



        import os
        from PySide import QtCore, QtGui

        class FileProxyModel(QtGui.QSortFilterProxyModel):
        def setIndexPath(self, index):
        self._index_path = index
        self.invalidateFilter()

        def filterAcceptsRow(self, sourceRow, sourceParent):
        if hasattr(self, "_index_path"):
        ix = self.sourceModel().index(sourceRow, 0, sourceParent)
        if self._index_path.parent() == sourceParent and self._index_path != ix:
        return False
        return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)

        if __name__ == '__main__':
        import sys
        app = QtGui.QApplication(sys.argv)
        path = # ...
        parent_dir = os.path.abspath(os.path.join(path, os.pardir))
        treeview = QtGui.QTreeView()
        model = QtGui.QFileSystemModel(treeview)
        model.setRootPath(QtCore.QDir.rootPath())
        proxy = FileProxyModel(treeview)
        proxy.setSourceModel(model)
        proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
        treeview.setModel(proxy)
        treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
        treeview.expandAll()
        treeview.show()
        sys.exit(app.exec_())





        share|improve this answer













        The idea is to use as root the parent directory and filter the sibling directories, for this I created a QSortFilterProxyModel that receives an index from the desired directory but you must pass it a QPersistentModelIndex since the latter is permanent unlike the QModelIndex that can be changed in any moment.



        import os
        from PySide import QtCore, QtGui

        class FileProxyModel(QtGui.QSortFilterProxyModel):
        def setIndexPath(self, index):
        self._index_path = index
        self.invalidateFilter()

        def filterAcceptsRow(self, sourceRow, sourceParent):
        if hasattr(self, "_index_path"):
        ix = self.sourceModel().index(sourceRow, 0, sourceParent)
        if self._index_path.parent() == sourceParent and self._index_path != ix:
        return False
        return super(FileProxyModel, self).filterAcceptsRow(sourceRow, sourceParent)

        if __name__ == '__main__':
        import sys
        app = QtGui.QApplication(sys.argv)
        path = # ...
        parent_dir = os.path.abspath(os.path.join(path, os.pardir))
        treeview = QtGui.QTreeView()
        model = QtGui.QFileSystemModel(treeview)
        model.setRootPath(QtCore.QDir.rootPath())
        proxy = FileProxyModel(treeview)
        proxy.setSourceModel(model)
        proxy.setIndexPath(QtCore.QPersistentModelIndex(model.index(path)))
        treeview.setModel(proxy)
        treeview.setRootIndex(proxy.mapFromSource(model.index(parent_dir)))
        treeview.expandAll()
        treeview.show()
        sys.exit(app.exec_())






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 22 '18 at 17:59









        eyllanesceyllanesc

        80.6k103258




        80.6k103258
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53430989%2fpyside-qfilesystemmodel-display-show-root-item%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith