Qtree小部件python;迭代列
Qt treewidget python; iterate columns
在 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()
迭代树形小部件的一种方法是使用 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)))
在 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()
迭代树形小部件的一种方法是使用 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)))