QTreeWidgetItemsを含むQTreeWidgetがあります。メソッドQTreeWidgetItem.flags()は、 Qt.ItemFlagsインスタンスを返します。
Qt.ItemFlagsタイプは、QFlagsのtypedefです。ItemFlag値のORの組み合わせを格納します。
さて、QTreeWidgetItemsの1つがあり、それを確認する必要があると仮定します—それはチェック可能かどうか?つまり、Qt.ItemFlagsインスタンスで発生するItemFlag(私の場合はQt.ItemIsUserCheckable)を見つける必要があります。
どうやってするの?
変更できるシンプルで整然とした例を次に示します(コメント行でマークされた関心のある部分)。
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_())