如何仅编辑QTreeWidgetItem的一列

2024-05-19 11:30:13 发布

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

我想知道如何只编辑QTreeWidgetItem的一列。在

目前,我可以编辑QTreeWidgetItem的所有列。在

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys

app = QApplication(sys.argv)
qApp = app

pointListBox = QTreeWidget()

header=QTreeWidgetItem(["Tree","First","secondo"])

pointListBox.setHeaderItem(header)   

root = QTreeWidgetItem(pointListBox, ["root"])
A = QTreeWidgetItem(root, ["A"])
barA = QTreeWidgetItem(A, ["bar", "i", "ii"])
bazA = QTreeWidgetItem(A, ["baz", "a", "b"])

barA.setFlags(barA.flags() | Qt.ItemIsEditable)
bazA.setFlags(bazA.flags() | Qt.ItemIsEditable)

pointListBox.show()
sys.exit(app.exec_())

编辑

我添加了一些更改,但我不知道如何编辑QtreeWidgetItem的第二列。在

^{pr2}$

Tags: fromimportapp编辑sysrootqtpyqt5
2条回答

没有方法/标志可以直接配置。在

您可以通过完全关闭Qt的EditTriggers来解决这个问题,并实现自己的函数来决定是否应该编辑某个项:

class MyWidget(QWidget):

    def __init__(parent):

        self.treeWidget = ...

        # switch off "default" editing behaviour
        # as it does not allow to configure only an individual
        # column as editable
        self.treeWidget.setEditTriggers(self._treeWidget.NoEditTriggers)

        # to be able to decide on your own whether a particular item
        # can be edited, connect e.g. to itemDoubleClicked
        self.treeWidget.itemDoubleClicked.connect(self.checkEdit)

    # in your connected slot, you can implement any edit-or-not-logic
    # you want
    def checkEdit(self, item, column):
        # e.g. to allow editing only of column 1:
        if column == 1:
            self.treeWidget.editItem(item, column)

如果您还想在其他场合编辑,只需将checkEdit连接到相应的信号,例如itemClickeditemEntered

试试这个,对我有用。在

self.treeWidget.itemDoubleClicked.connect(self.checkEdit)  
def checkEdit(self, item, column):

   tmp = item.flags()

   if column == 1 :
      item.setFlags(tmp | QtCore.Qt.ItemIsEditable)
   elif tmp & QtCore.Qt.ItemIsEditable:
      item.setFlags(tmp ^ QtCore.Qt.ItemIsEditable)

相关问题 更多 >

    热门问题