【发布时间】:2021-12-15 12:22:12
【问题描述】:
我想这样做的原因是允许用户使用QTreeWidget 创建文件树,然后我想将该树提取到嵌套的dict 结构中,并以某种方式保存它。我考虑过使用txt 文件和eval 方法将所有保存的方案简单地加载到某个数组或另一个字典中,其中键是方案的名称,因此用户可以简单地选择一个方案或如果他们愿意,可以编辑它。这自然导致我不得不在用户选择编辑后将保存的dict 转换回QTreeWidget。
虽然这是我的问题。
我已经能够使用递归函数成功导航QTreeWidget。我纠结的是创建嵌套dict 背后的逻辑。
以下是我目前想出的:
def tree_to_dict(self, parent, key):
for i in range(parent.childCount()):
cur_par = parent.child(i)
if cur_par.childCount() == 0:
try:
if type(self.scheme[key]) is dict :
self.scheme[key][cur_par.text(0)] = 'E'
except KeyError:
key = cur_par.text(0)
self.scheme[key] = 'E'
else:
key = cur_par.text(0)
self.scheme[key] = {}
self.tree_to_dict(cur_par, key)
我知道这是错误的。这就是我需要帮助的原因。
上面的代码从下面的QTreeWidget生成下面的dict
a
b
a
c
{'a':'E', 'b':{'a':'E', 'c':'E'}}
但应该是:
{'a':'E', 'b':{'a':'E'}, 'c':'E'}
E 仅仅意味着不会有更多的子目录。
我已经看到了一些其他的实现,但它们非常令人困惑,我不太明白他们的逻辑。 This 与我在这里提出的问题几乎重复,但尚未得到回答。我已经尝试过调整他的实现,但它(无论如何对我来说)很复杂,很难适应我的程序结构。
【问题讨论】:
标签: python dictionary logic qtreewidget pyqt6