PySide: QFileSystemModel - Display/Show Root Item
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
add a comment |
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
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
add a comment |
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
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
python pyside qtreeview qfilesystemmodel
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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_())
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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_())
add a comment |
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_())
add a comment |
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_())
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_())
answered Nov 22 '18 at 17:59


eyllanesceyllanesc
80.6k103258
80.6k103258
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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