QTreeWidget
을 XML 파일로 만듭니다. XML은 다음과 같다 나는 이름의 나무 만들고 싶어 : 나는 그렇게 (다소 단순화 된 코드)를 수행하려면 다음 코드를 사용하고QTreeWidget 첫 번째 항목을 선택하십시오.
<root>
<f name='foo'>bar
<f name='foo2'>baz</f>
</f>
</root>
순간을 :
import lxml.etree as et
#...
self.xml = et.XML(filters.filtersxml)
self.tree_widget = QTreeWidget(parent)
def add_items(parent, xmlroot):
for i in xmlroot.getchildren():
item = QTreeWidgetItem(parent, [i.get('name')])
if len(i.getchildren()) != 0:
add_items(item, i)
add_items(self.tree_widget, self.xml)
사실 이것에 대해 두 가지 질문이 있습니다
- 홈페이지 질문 : 트리의 첫 번째 항목을 선택하는 몇 가지 방법으로, foo는 있는가 이 경우.
setCurrentItem()
과setCurrentIndex()
을 사용하여 작업을 시도했지만 작동하지 못했습니다. 제가 그것에 대해 조금 봤지만, 찾은 모든 솔루션은 모델에서 작동합니다. - (선택 사항)이 재귀 함수가 좋은 방법인가, 아니면 더 좋은 방법이 있습니까? 항목이 이미 트리시에 추가 된 것을
# after all your code add_items(self.tree_widget, self.xml) # select the root item self.tree_widget.setCurrentItem(self.tree_widget.topLevelItem(0))
당신은 단지 확인해야 :
일반적으로 트리 외부의 항목을 빌드 한 다음 단일 루트 항목) 또는 최상위 수준의 목록 items와 do : insertTopLevelItem' 또는'insertTopLevelItems' – jdi
네, 일반적으로 그렇게하는 방식입니다. 어떤 것이 더 좋고 빠르지는 확실하지 않으므로, 둘 다 실행 가능하다고 말할 것입니다. blockSignals (True/False) 및 setUpdatesEnabled (False/True) 호출 내에서 이와 같은 트리 위젯에 대한 수정 사항을 샌드위치하는 것이 좋습니다. –
글쎄, 먼저 아이템 구조를 구축하고 마침내 트리를 한 번 호출하면된다고 생각하면 걱정할 필요가 없을 것입니다. 그러나 루프에서 항목을 임의로 추가 및 제거 할 때 좋은 점은 – jdi