私は、隠されたルートを持つQTreeWidget、ヘッダーとして2つの子供、そしてそれらの子の下に2人の子供を持っています。それはおそらく、この例では無関係ですが、私は現在、私はself.CurrentIndexLabel
を使用して、現在選択されたラベルを追跡HEADER 1、ITEM 12のsetCheckState
に必要item = {}
辞書から変数を使用してQTreeWidgetの子の子のsetCheckedStateを設定するにはどうすればいいですか?
ROOT (HIDDEN)
|
|- HEADER 1 (CHILD, NOT CHECKABLE)
| |
| |- ITEM 11 (CHILD, CHECKABLE)
| |- ITEM 12 (CHILD, CHECKABLE)
|
|- HEADER 2 (CHILD)
| |
| | - ITEM 21 (CHILD, CHECKABLE)
| | - ITEM 22 (CHILD, CHECKABLE)
。私はそのようなのような木を埋めています
TreeList = ({
'Header1': (('Item11', 'Item12',)),
'Header2': (('Item21', 'Item22',)),
})
item = {'Item12': {'ItemEnabled': 1}} # 0 = No, 1 = Yes
for key, value in TreeList.items():
parent = QTreeWidgetItem(self.ListTreeView, [key])
for val in value:
child = QTreeWidgetItem([val])
child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
child.setCheckState(0, Qt.Unchecked)
parent.addChild(child)
は当初、私はアイテムがチェック、またはオフ各項目の変数を鋲item = {}
辞書に基づいて、ユーザーが項目のチェックを外したときにされているかどうかを設定する必要があり、私はアイテムが有効かどうかを反映するためにitem = {}
ディクショナリを変更する必要があります。
変更を検出するために信号とスロットを使用する必要があると仮定しますが、リストの項目をチェックしてフラグを立てる方法がわからないため、ユーザーの確認を反映する方法がわかりませんまたはTreeList
の項目のチェックを外してください。
1と0を使用してチェックを追跡したり、チェックを外して辞書item = {}
を最新の状態に更新するのが理想的です。
これを達成するにはどうすればよいでしょうか?私はPythonには新しいので、私と一緒にご負担ください。私はPython 3.6とPyQt5を使用しています
私は 'item'辞書の構造があると思う:キーとして
QTreeWidgetItem
テキスト値を使用して(まだ良いか、QTreeWidgetItem
オブジェクト自体は)とても例えばitem = {'Item12': {'ItemEnabled': True}}
のようなdictのは、容易になるだろう不適切である。 'QTreeWidgetItem'の値をキーとして使う方が簡単なので、' item = {'Item12':{'ItemEnabled':True}} 'のようなdictがあります。 また、このキーは 'Qt.DisplayRole'の代わりに' Qt.UserRole'を使用して保存することができます –
これは私が使用している辞書の非常に単純化されたバージョンです。記録します。 –