QTreeWidgetItem为editab时如何编辑

2024-04-26 07:40:42 发布

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

enter image description here

当双击项目并且用户输入一个新的项目名称时,我希望将此文本值分配给打印的item._name属性。如何做到这一点?在

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__()
        for i, item_name in enumerate(['Item_1','Item_2','Item_3','Item_4','Item_5']):
            rootItem = QtGui.QTreeWidgetItem()
            rootItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable)
            rootItem._name = 'Root %s'%i
            rootItem.setText(0, rootItem._name)      

            for number in range(3):
                childItem = QtGui.QTreeWidgetItem(rootItem)
                childItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable)
                childItem._name = 'Child %s'%number
                childItem.setText(0, childItem._name)

            self.addTopLevelItem(rootItem)
        self.clicked.connect(self.onClick)
        self.show()
    def onClick(self, index):
        print self.currentItem()._name

tree=Tree()
app.exec_()

Tags: nameinselftreeappforinitdef
1条回答
网友
1楼 · 发布于 2024-04-26 07:40:42

{a1}

子类QTreeWidgetItem。定义setData方法将值赋给属性_name。在

from PyQt4 import QtCore, QtGui
app = QtGui.QApplication([])

class TreeWidgetItem(QtGui.QTreeWidgetItem):
    def __init__(self, parent=None):
        super(TreeWidgetItem, self).__init__(parent)  

    def setData(self, column, role, value): 
        super(TreeWidgetItem, self).setData(column, role, value)
        self._name = value.toString()

class Tree(QtGui.QTreeWidget):
    def __init__(self, *args, **kwargs):
        super(Tree, self).__init__()
        for i, item_name in enumerate(['Item_1','Item_2','Item_3','Item_4','Item_5']):
            rootItem = TreeWidgetItem(self)
            rootItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable)
            rootItem._name = 'Root %s'%i
            rootItem.setText(0, rootItem._name)      

            for number in range(3):
                childItem = TreeWidgetItem(rootItem)
                childItem.setFlags(rootItem.flags() | QtCore.Qt.ItemIsEditable)
                childItem._name = 'Child %s'%number
                childItem.setText(0, childItem._name)

            self.addTopLevelItem(rootItem)

        self.clicked.connect(self.onClick)
        self.show()

    def onClick(self, index):
        print self.currentItem()._name

相关问题 更多 >