【问题标题】:Qt treewidget python; iterate columnsQtreewidget python;迭代列
【发布时间】:2016-06-24 12:33:30
【问题描述】:

在 PyQt4 中给定一个带有一些行和列的树小部件:

1) 有没有一种方法可以轻松地遍历所有单元格?

2) 如何检查除第一列之外的复选框是否被选中?

到目前为止,我只设法获得了第一列中复选框的结果,请参阅here

为了澄清,这里是小部件我想象的样子:(第四列应该是可编辑的)

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
import sys


def main(): 
    app     = QApplication (sys.argv)
    tree    = QTreeWidget ()
    item    = QTreeWidgetItem()

    tree.headerItem().setText(0, "col1")
    tree.headerItem().setText(1, "col2")
    tree.headerItem().setText(2, "col3")
    tree.headerItem().setText(3, "Notes")

    for ii in xrange(3):
        parent = QTreeWidgetItem(tree)
        parent.setText(0, "Parent {}".format(ii))
        parent.setFlags(parent.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
        for x in xrange(4):
            child = QTreeWidgetItem(parent)
            child.setFlags(child.flags() | Qt.ItemIsUserCheckable)
            child.setText(0, "Child {}".format(x))
            child.setCheckState(0, Qt.Unchecked)

            #create the checkbox
            for i in xrange(1, 5):
                if i < 3:
                    child.setText(i, "")
                    child.setCheckState(i, Qt.Unchecked)
                if i == 3:
                    child.setText(i, "Any Notes?")
                    child.setFlags(child.flags() | Qt.ItemIsEditable)

    tree.show() 
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python pyqt pyqt4 qtreewidget


    【解决方案1】:

    遍历树小部件的一种方法是使用QTreeWidgetItemIterator

    def iter_tree_widget(root):
        iterator = QtGui.QTreeWidgetItemIterator(root)
        while True:
            item = iterator.value()
            if item is not None:
                yield item
                iterator += 1
            else:
                break
    

    root 参数可以是 tree-widget(遍历整个树)或 tree-widget-item(遍历单个分支)。

    迭代器每行产生一项,只需指定列索引即可访问该项的列:

    column = 0
    for item in iter_tree_widget(tree):
        print('State: %s, Text: "%s"' % (
              item.checkState(column), item.text(column)))
    

    【讨论】:

    • 没什么可补充的,很棒的例子和解释。
    猜你喜欢
    • 2015-10-04
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多