1

我的问题是:我有一个带有项目的 QListWidget(在窗口的左侧)和右侧的 QTextEdit

items               textEdit 
-item1
---subitem1
---subitem2
-item2
---subitem1
---subitem2

我像这样填充listWidget:

for name in names:
        item = QtWidgets.QTreeWidgetItem([name])
        self.treeWidget.addTopLevelItem(item)
        for cmd in description:
            item2 = QtWidgets.QTreeWidgetItem([cmd])
            item.addChild(item2)

然后我希望如果我在子项上单击某些文本,则 textEdit 中会出现一些文本,只有子项可以出现文本。我写

self.treeWidget.itemClicked.connect(self.item2Clicked)
....
def item2Clicked(self, item, column):
    self.textEdit.insertPlainText("hello")

但这是不对的,因为如果我点击 item1 - 文本也会出现。感谢您的帮助,对不起我的英语:)

4

1 回答 1

1

顶级项目没有父项,因此您可以这样做:

    def item2Clicked(self, item, column):
        if item.parent() is not None:
            self.textEdit.insertPlainText("hello")

更一般地,您可以在构造函数中为每个项目设置一个类型:

    item = QtWidgets.QTreeWidgetItem([name], 1)
    self.treeWidget.addTopLevelItem(item)
    for cmd in description:
        item2 = QtWidgets.QTreeWidgetItem([cmd], 2)

然后做:

    def item2Clicked(self, item, column):
        if item.type() == 2:
            self.textEdit.insertPlainText("hello")
于 2014-02-14T17:53:48.747 回答