Qt treewidget python;迭代列

2024-10-01 17:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

给定PyQt4中的树小部件,其中包含一些行和列:

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

2)如果在第一列之外选中了复选框,如何进行检查?在

到目前为止,我只得到第一列中复选框的结果,请参见here。在

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

widget structure

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()

Tags: inimportchildtreeformainsysqt
1条回答
网友
1楼 · 发布于 2024-10-01 17:23:42

迭代树小部件的一种方法是使用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参数可以是树小部件(遍历整个树),也可以是树小部件项(迭代单个分支)。在

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

^{pr2}$

相关问题 更多 >

    热门问题