yield的应用——QTreeWidgetItem的迭代
最近学python 用 pyside,所以做个笔记
在Qt里,要是要遍历QTreeWidget所有节点,其中一个方法就是用QTreeWidgetItemIterator,但有个烦人的地方,这个东西在C++里还行,但在python里就太不python了。
it = QTreeWidgetItemIterator(tree)while it.value(): v = it.value() do_something() it += 1
tree_item_loop = function(tree, fn) { it = QTreeWidgetItemIterator(tree) while (it.value()) { fn(it.value()); it += 1 }}tree_item_loop(tree, function(item){ // })def tree_item_loop(tree, fn): it = QTreeWidgetItemIterator(tree) while it.value(): s_item = it.value() fn(s_item) it += 1def fn(item): passtree_item_loop(tree, fn)
function some(item, index) {} function(item) {} def tree_items(tree): it = QTreeWidgetItemIterator(tree) while it.value(): yield it.value() it += 1
for item in tree_items(tree): print item
for index, item in enumerate(tree_items(tree)): print index, item