これを行う理由は、ユーザーが を使用してファイル ツリーを作成できるようにするためです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)
私はこれが間違っていることを知っています。だからこそ助けが必要なのです。
上記のコードは、次のdict
フォームを生成します。QTreeWidget
a
b
a
c
{'a':'E', 'b':{'a':'E', 'c':'E'}}
ただし、次のようにする必要があります。
{'a':'E', 'b':{'a':'E'}, 'c':'E'}
E は単に、これ以上サブディレクトリがないことを意味します。
私はこれの他のいくつかの実装を見てきましたが、それらはひどく紛らわしく、論理がよくわかりません。これは、私がここで尋ねている質問とほぼ同じですが、まだ回答がありません。私は彼の実装を適応させようとしましたが、(とにかく私にとって) 複雑で、私のプログラムの構造に適合させるのは困難です。