| 23 | |
| 24 | |
| 25 | class TreeView(QTreeView): |
| 26 | |
| 27 | def __init__(self, *args, **kwargs): |
| 28 | super(TreeView, self).__init__(*args, **kwargs) |
| 29 | self._initModel() |
| 30 | self._initSignals() |
| 31 | |
| 32 | def _initModel(self): |
| 33 | """设置目录树Model""" |
| 34 | self._dmodel = QStandardItemModel(self) |
| 35 | self._fmodel = SortFilterModel(self) |
| 36 | self._fmodel.setSourceModel(self._dmodel) |
| 37 | self.setModel(self._fmodel) |
| 38 | |
| 39 | def _initSignals(self): |
| 40 | Signals.itemJumped.connect(self.onItemJumped) |
| 41 | Signals.filterChanged.connect(self._fmodel.setFilterRegExp) |
| 42 | self.clicked.connect(self.onClicked) |
| 43 | self.doubleClicked.connect(self.onDoubleClicked) |
| 44 | |
| 45 | def rootItem(self): |
| 46 | """得到根节点Item""" |
| 47 | return self._dmodel.invisibleRootItem() |
| 48 | |
| 49 | def findItems(self, name): |
| 50 | """根据名字查找item |
| 51 | :param name: |
| 52 | """ |
| 53 | return self._dmodel.findItems(name) |
| 54 | |
| 55 | def onItemJumped(self, name): |
| 56 | items = self.findItems(name) |
| 57 | if not items: |
| 58 | return |
| 59 | index = self._fmodel.mapFromSource(self._dmodel.indexFromItem(items[0])) |
| 60 | self.setCurrentIndex(index) |
| 61 | self.expand(index) |
| 62 | # # 显示readme |
| 63 | Signals.urlLoaded.emit(name) |
| 64 | |
| 65 | def listSubDir(self, pitem, path): |
| 66 | """遍历子目录 |
| 67 | :param item: 上级Item |
| 68 | :param path: 目录 |
| 69 | """ |
| 70 | paths = os.listdir(path) |
| 71 | files = [] |
| 72 | for name in paths: |
| 73 | spath = os.path.join(path, name) |
| 74 | if not os.path.isfile(spath): |
| 75 | continue |
| 76 | spath = os.path.splitext(spath) |
| 77 | if len(spath) == 0: |
| 78 | continue |
| 79 | if spath[1] == '.py' and spath[0].endswith('__init__') == False: |
| 80 | files.append(name) |
| 81 | |
| 82 | # 已经存在的item |