Python 3.x 在PYQT5树状图中按下按钮时,如何取消选中项目?

Python 3.x 在PYQT5树状图中按下按钮时,如何取消选中项目?,python-3.x,pyqt5,qtreewidget,qpushbutton,unchecked,Python 3.x,Pyqt5,Qtreewidget,Qpushbutton,Unchecked,我使用tree小部件构建树结构,默认情况下选中所有项。有一个列表保存了一些应该取消选中的项目。我想做的是在单击按钮时取消选中这些项目。我可以使用findItems(uncheckitems,Qt.MatchExactly | Qt.MatchRecursive,0)来查找对象。但是当我使用setCheckState(0,Qt.Unchecked)时,程序总是崩溃 MENUS = [ ("Action1", [ ("Action4", [ ("Action8", []),

我使用tree小部件构建树结构,默认情况下选中所有项。有一个列表保存了一些应该取消选中的项目。我想做的是在单击按钮时取消选中这些项目。我可以使用findItems(uncheckitems,Qt.MatchExactly | Qt.MatchRecursive,0)来查找对象。但是当我使用setCheckState(0,Qt.Unchecked)时,程序总是崩溃

MENUS = [
("Action1", [
    ("Action4", [
        ("Action8", []), ("Action9", []), ("Action10", [])
        ]),
    ("Action6", [
        ("Action11", []), ("Action12", []), ("Action13", [])
        ]),
    ("Action7", [
        ("Action14", []), ("Action15", []), ("Action16", [])
        ]),
    ]),
("Action2", [
    ("Action17", [
        ("Action20", [
            ("Action25", []), ("Action26", []), ("Action27", [])
            ]),
        ("Action21", []),
        ("Action22", []),
        ]),
    ("Action18", [
        ("Action23", [
            ("Action28", []), ("Action29", []), ("Action30", [])
            ]),
        ("Action24", []),
        ]),
    ("Action19", []),
    ]),
("Action3", [
    ("Action31", [
        ("Action34", []), ("Action35", []), ("Action36", [])
        ]),
    ("Action32", [
        ("Action37", []), ("Action38", []), ("Action39", [])
        ]),
    ("Action33", []),
    ]),
]

uncheckedaction = ["Action3", "Action11", "Action29"]

from uitest import Ui_MainWindow
from PyQt5.QtWidgets import (
    QApplication, QMainWindow, QTreeWidgetItem,
    )
from PyQt5.QtCore import Qt

class window(QMainWindow):
    def __init__(self, parent=None):
        super(window, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.loadMenus(MENUS)
        self.ui.Menutree.itemChanged.connect(self.handleItemChanged)
        self.ui.Uncheck.clicked.connect(self.uncheckprocess)

    def uncheckprocess(self):
        menutree = self.ui.Menutree
        for uncheck in uncheckedaction:
            uncheckeditem = menutree.findItems(uncheck, Qt.MatchExactly | Qt.MatchRecursive, 0)
            print("uncheckeditem:", uncheckeditem)
            uncheckeditem.setCheckState(0, Qt.Unchecked)

    def loadMenus(self, menus):
        def recurse(parent, items):
            for text, children in items:
                item = QTreeWidgetItem(parent)
                item.setText(0, text)
                item.setCheckState(0, Qt.Checked)
                recurse(item, children)
        recurse(self.ui.Menutree, menus)
        self.ui.Menutree.expandAll()

    def handleItemChanged(self, item, column):
        def recurse(parent, state):
            for index in range(parent.childCount()):
                child = parent.child(index)
                # child.setCheckState(0, state)
                child.setDisabled(state == Qt.Unchecked)
                recurse(child, state)
        recurse(item, item.checkState(0))

if __name__ == "__main__":

    app = QApplication([''])
    gui = window()
    gui.show()
    app.exec_()
用户界面:


有人能帮我吗?非常感谢。

您找到的是对象列表,而不是单个对象:

def uncheckprocess(self):
    menutree = self.ui.Menutree
    for uncheck in uncheckedaction:
        uncheckeditems = menutree.findItems(uncheck, Qt.MatchExactly | Qt.MatchRecursive, 0)
        for uncheckeditem in uncheckeditems:
            uncheckeditem.setCheckState(0, Qt.Unchecked)
def uncheckprocess(self):
    menutree = self.ui.Menutree
    for uncheck in uncheckedaction:
        uncheckeditems = menutree.findItems(uncheck, Qt.MatchExactly | Qt.MatchRecursive, 0)
        for uncheckeditem in uncheckeditems:
            uncheckeditem.setCheckState(0, Qt.Unchecked)