我有一个QTreeWidget http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qtreewidget.html with QTreeWidgetItem http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qtreewidgetitem.html。方法QTreeWidgetItem.flags() http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtreewidgetitem.html#flags返回我Qt.ItemFlags http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt-itemflags.html实例。
The Qt.ItemFlags http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt-itemflags.htmltype 是 QFlags 的类型定义。它存储一个 OR 组合ItemFlag http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt.html#ItemFlag-enum values.
好吧,假设现在我有我的一个QTreeWidgetItem http://www.riverbankcomputing.com/static/Docs/PyQt4/html/qtreewidgetitem.html我需要弄清楚——它是否可以检查?换句话说,我需要找到出现的情况ItemFlag http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt.html#ItemFlag-enum(就我而言,它是Qt.ItemIsUserCheckable http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt.html#ItemFlag-enum) in Qt.ItemFlags http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qt-itemflags.html实例。
怎么做?
这是一个简单而整洁的示例,您可以修改(感兴趣的部分由注释行标记):
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.treeWidget = QtGui.QTreeWidget()
self.treeWidget.setHeaderHidden(True)
self.addItems(self.treeWidget.invisibleRootItem())
self.treeWidget.itemClicked.connect (self.handleClicked)
layout = QtGui.QVBoxLayout()
layout.addWidget(self.treeWidget)
self.setLayout(layout)
def addItems(self, parent):
column = 0
clients_item = QtGui.QTreeWidgetItem(parent, ['Clients'])
clients_item.setData(column, QtCore.Qt.UserRole, 'data Clients')
clients_item.setExpanded(True)
item_1 = QtGui.QTreeWidgetItem(clients_item, ['Item 1'])
item_1.setData(column, QtCore.Qt.UserRole, 'data Item 1')
item_1.setCheckState(column, QtCore.Qt.Unchecked)
item_2 = QtGui.QTreeWidgetItem(clients_item, ['Item 2'])
item_2.setData(column, QtCore.Qt.UserRole, 'data Item 2')
item_2.setCheckState(column, QtCore.Qt.Unchecked)
def handleClicked(self, item, column):
if item.checkState(column) == QtCore.Qt.Checked:
print "checked", item, item.text(column)
if item.checkState(column) == QtCore.Qt.Unchecked:
print "NOT checked", item, item.text(column)
# this part doesn't work ===============================
# begin of part
flags = item.flags()
if QtCore.Qt.ItemIsUserCheckable in flags:
print "is checkable", item, item.text(column)
else:
print "is NOT checkable", item, item.text(column)
# end of part ==========================================
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())