| 51 | |
| 52 | |
| 53 | class JsonTreeWidget(QTreeWidget): |
| 54 | |
| 55 | def __init__(self, *args, **kwargs): |
| 56 | super(JsonTreeWidget, self).__init__(*args, **kwargs) |
| 57 | self.setEditTriggers(self.NoEditTriggers) |
| 58 | self.header().setVisible(False) |
| 59 | # 帮点单击事件 |
| 60 | self.itemClicked.connect(self.onItemClicked) |
| 61 | |
| 62 | def onItemClicked(self, item): |
| 63 | """item单击事件""" |
| 64 | if item.url: # 调用浏览器打开网址 |
| 65 | webbrowser.open_new_tab(item.url) |
| 66 | |
| 67 | def parseData(self, datas, parent=None): |
| 68 | """解析json数据""" |
| 69 | for data in datas: |
| 70 | url = data.get('url', '') |
| 71 | items = data.get('items', []) |
| 72 | # 生成item |
| 73 | _item = QTreeWidgetItem(parent) |
| 74 | _item.setIcon(0, QIcon(data.get('icon', ''))) |
| 75 | _widget = ItemWidget( |
| 76 | data.get('name', ''), |
| 77 | data.get('badge', []), |
| 78 | self |
| 79 | ) |
| 80 | _item.url = url # 可以直接设置变量值 |
| 81 | self.setItemWidget(_item, 0, _widget) |
| 82 | if url: |
| 83 | continue # 跳过 |
| 84 | # 解析儿子 |
| 85 | if items: |
| 86 | self.parseData(items, _item) |
| 87 | |
| 88 | def loadData(self, path): |
| 89 | """加载json数据""" |
| 90 | datas = open(path, 'rb').read() |
| 91 | datas = datas.decode(chardet.detect(datas).get('encoding', 'utf-8')) |
| 92 | self.parseData(json.loads(datas), self) |
| 93 | |
| 94 | |
| 95 | if __name__ == '__main__': |