How does PyQt5 traverse all items under QTreeWidget? pyqt5qtreewidget
As a cainiao, you cannot describe the background of TAT as you did before describing the problem. By default, only those who read this article have already understood QTreeWidget, in python, we want to traverse all the items under it.
Because the software of the tester needs to be deleted after pressing the relevant function key.QTreeWidgetChecked. Therefore, you need to traverse all items to check the status. When reading the QT document (because the Reference Guide of PyQt5 has not been updated ...... so I had to point it to the C ++ Documentation link) and find that QT actually provides an iterator --QTreeWidgetItemIteratorIn its official documentation, it implements the following functions:
1 QTreeWidgetItemIterator it(treeWidget);2 while (*it) {3 if ((*it)->text(0) == itemText)4 (*it)->setSelected(true);5 ++it;6 }
......
For a cainiao, it is too difficult to change Python at a glance! -- So I went to Bing to see if there were any other methods. We found that this method is mostly used in PyQt:
1. UseQTreeWidgetOfTopLevelItemCount() ObtainTopLevelItemNumber
2. Use the for loop andTopLevelItem(IntIndex) Obtain the top-level node
3. ReuseQTreeWidgetItemTo obtain the children node under the top node.
Because I have been taught to pursue conciseness and watch QT clearly have ready-made functions but cannot use them, I cannot find a satisfactory answer in English search (Bing is used, but google cannot use it ), I will try againQTreeWidgetItemIteratorIf it takes a lot of time to complete the process without making any progress, you only need to use the code to test it. After N failures, an unrelated search result reminds you to use help in the Python interactive line to check whether it provides instructions here. In a try, there are:
class QTreeWidgetItemIterator(sip.simplewrapper) | QTreeWidgetItemIterator(QTreeWidgetItemIterator) | QTreeWidgetItemIterator(QTreeWidget, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) | QTreeWidgetItemIterator(QTreeWidgetItem, QTreeWidgetItemIterator.IteratorFlags flags=QTreeWidgetItemIterator.All) | | Method resolution order: | QTreeWidgetItemIterator | sip.simplewrapper | builtins.object | | Methods defined here: | | __iadd__(self, value, /) | Return self+=value. | | __isub__(self, value, /) | Return self-=value.
(The document is not complete. Here, only the small part required for this problem is shown)
All of a sudden, we see the dawn of the problem !! However, as a cainiao, although I saw Methods, I didn't immediately associate it with the pointer in C ++. I am still struggling withQTreeWidgetItemIteratorWhat should I return?isinstance
Judging whether it is neither an iterator nor an iterator )......
After hitting the wall several times, I suddenly reacted. The final implementation code is as follows:
Def delSelected (self): item = QtWidgets. QTreeWidgetItemIterator (self. treeWidget) # The value () of this class is QTreeWidgetItem while item. value (): if item. value (). checkState (0) = QtCore. qt. checked: # refer to the online method to determine whether there are any parent nodes and then perform the operations separately. The more direct self is not found. deleteNode () # Because I have deleted the node here, the location of the node changes after deletion, so we need to move back to item = item. _ isub _ (1) # To the next node item = item. _ iadd _ (1)
Is it very simple! Is this function available officially !! I don't need to consider the traversal efficiency of the cainiao is too easy to use !!
After the problem is solved, this article is also over, commemorating my crazy afternoon. Thank you for reading this! If any error occurs, please correct it!