0
我做了一个QTreeWidget,我有comboBox作为QTreeWidgetItem。如何正确连接信号,以便每个comboxBox索引都会更改treeWidget中的同一行?PyQt连接信号从QComboBox里面的QTreeWidgetItem
说,如果我改变从添加行itemB行动删除。它会改变itemB的backgroundColor至somethingelse ...
data = { 'GroupA': [
{'itemA': {'action' : 'Add'}},
{'itemB':{'action' : 'Updates'}},
],
'GroupB': [
{'someOtherItemA': {'action' : 'Updates'}},
{'someOtherItemA':{'action' : 'Add'}},
]
}
class Window(QtGui.QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.treeWidget=QtGui.QTreeWidget(self)
self.treeWidget.setGeometry(QtCore.QRect(50,20,450,240))
self.header=QtGui.QTreeWidgetItem(["Item","Action"])
self.treeWidget.setHeaderItem(self.header)
for group in data:
groupItem=QtGui.QTreeWidgetItem(self.treeWidget)
groupItem.setText(0,group)
groupItem.setFlags(QtCore.Qt.ItemIsEnabled)
for itemDict in data[group]:
for item in itemDict:
itemWidget=QtGui.QTreeWidgetItem(groupItem, [item])
itemWidget.setText(0, item)
action = itemDict[item]['action']
self.action = self._actionCombo()
self.treeWidget.setItemWidget(itemWidget, 1, self.actionCombo)
slotLambda = lambda: self.actionChanged(itemWidget)
self.action.currentIndexChanged.connect(slotLambda)
self.treeWidget.expandAll()
@QtCore.pyqtSlot(QtGui.QTreeWidgetItem)
def actionChanged(self, treeWidgetItem):
treeWidgetItem.setBackgroundColor(0, QtGui.QColor(0,0,0))
def _actionCombo(self):
self.actionCombo = QtGui.QComboBox()
actionLists = ['Add', 'Updates', 'Keep', 'Remove']
for actionItem in actionLists:
self.actionCombo.addItem(actionItem)
return self.actionCombo
def report(self):
#construct the data back in a dictionary
newData = {}
return newData
另一个问题是如何构建我基于该QtreeWidget数据字典做?这样我就可以得到用户为每个项目的操作选择的内容,并像以下字典一样报告回来?
dataReportBack = { 'GroupA': [
{'itemA': {'action' : 'Add'}},
{'itemB':{'action' : 'Updates'}},
],
'GroupB': [
{'someOtherItemA': {'action' : 'Updates'}},
{'someOtherItemA':{'action' : 'Add'}},
]
}