[{"data":1,"prerenderedAt":2828},["ShallowReactive",2],{"post-2025-09-02-pyqt5":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"tags":11,"body":15,"_type":2822,"_id":2823,"_source":2824,"_file":2825,"_stem":2826,"_extension":2827},"\u002Fblog\u002F2025-09-02-pyqt5","blog",false,"","PyQt5-树控件","PyQt5树控件(QTreeWidget)详解，树形结构数据展示、编辑与操作。","2025-09-02",[12,13,14],"Python","PyQt5","GUI",{"type":16,"children":17,"toc":2816},"root",[18,49,63,67,85,95,505,517,524,529,660,675,694,1135,1140,1149,1155,1181,1196,1237,1632,1637,1645,1658,1661,1687,1713,1817,1834,1941,1953,1966,1993,2006,2046,2378,2382,2390,2396,2416,2511,2540,2544,2552,2558,2578,2601,2605,2613,2619,2668,2682,2687,2695,2701,2722,2761,2774,2797,2802,2810],{"type":19,"tag":20,"props":21,"children":22},"element","p",{},[23,30,32,39,41,47],{"type":19,"tag":24,"props":25,"children":26},"strong",{},[27],{"type":28,"value":29},"text","树控件可以为用户显示节点层次结构",{"type":28,"value":31},"，而每个节点又可以包含子节点，包含子节点的节点叫父节点，在设计树形结构（如导航菜单等）时，非常方便。PyQt5中提供了两个树控件，分别为",{"type":19,"tag":33,"props":34,"children":36},"code",{"className":35},[],[37],{"type":28,"value":38},"TreeView",{"type":28,"value":40},"和",{"type":19,"tag":33,"props":42,"children":44},{"className":43},[],[45],{"type":28,"value":46},"TreeWidget",{"type":28,"value":48},"，本节将对它们的使用进行详解。",{"type":19,"tag":50,"props":51,"children":53},"h2",{"id":52},"_1treeview树视图",[54,56,61],{"type":28,"value":55},"1  ",{"type":19,"tag":33,"props":57,"children":59},{"className":58},[],[60],{"type":28,"value":38},{"type":28,"value":62},"：树视图",{"type":19,"tag":64,"props":65,"children":66},"hr",{},[],{"type":19,"tag":20,"props":68,"children":69},{},[70,75,77,83],{"type":19,"tag":33,"props":71,"children":73},{"className":72},[],[74],{"type":28,"value":38},{"type":28,"value":76},"控件对应PyQt5中的",{"type":19,"tag":33,"props":78,"children":80},{"className":79},[],[81],{"type":28,"value":82},"QTreeView",{"type":28,"value":84},"类，它是树控件的基类，在使用时必须为其提供一个模型来与之配合。",{"type":19,"tag":20,"props":86,"children":87},{},[88,93],{"type":19,"tag":33,"props":89,"children":91},{"className":90},[],[92],{"type":28,"value":82},{"type":28,"value":94},"类的常用方法及说明如表所示。",{"type":19,"tag":96,"props":97,"children":98},"table",{},[99,124],{"type":19,"tag":100,"props":101,"children":102},"thead",{},[103],{"type":19,"tag":104,"props":105,"children":106},"tr",{},[107,116],{"type":19,"tag":108,"props":109,"children":110},"th",{},[111],{"type":19,"tag":24,"props":112,"children":113},{},[114],{"type":28,"value":115},"方    法",{"type":19,"tag":108,"props":117,"children":118},{},[119],{"type":19,"tag":24,"props":120,"children":121},{},[122],{"type":28,"value":123},"说    明",{"type":19,"tag":125,"props":126,"children":127},"tbody",{},[128,142,155,168,181,194,207,220,233,246,259,272,285,298,311,324,337,350,363,376,389,402,468],{"type":19,"tag":104,"props":129,"children":130},{},[131,137],{"type":19,"tag":132,"props":133,"children":134},"td",{},[135],{"type":28,"value":136},"autoExpandDelay()",{"type":19,"tag":132,"props":138,"children":139},{},[140],{"type":28,"value":141},"获取自动展开节点所需的延时时间",{"type":19,"tag":104,"props":143,"children":144},{},[145,150],{"type":19,"tag":132,"props":146,"children":147},{},[148],{"type":28,"value":149},"collapse()",{"type":19,"tag":132,"props":151,"children":152},{},[153],{"type":28,"value":154},"收缩指定级的节点",{"type":19,"tag":104,"props":156,"children":157},{},[158,163],{"type":19,"tag":132,"props":159,"children":160},{},[161],{"type":28,"value":162},"collapseAll()",{"type":19,"tag":132,"props":164,"children":165},{},[166],{"type":28,"value":167},"收缩所有节点",{"type":19,"tag":104,"props":169,"children":170},{},[171,176],{"type":19,"tag":132,"props":172,"children":173},{},[174],{"type":28,"value":175},"expand()",{"type":19,"tag":132,"props":177,"children":178},{},[179],{"type":28,"value":180},"展开指定级的节点",{"type":19,"tag":104,"props":182,"children":183},{},[184,189],{"type":19,"tag":132,"props":185,"children":186},{},[187],{"type":28,"value":188},"expandAll()",{"type":19,"tag":132,"props":190,"children":191},{},[192],{"type":28,"value":193},"展开所有节点",{"type":19,"tag":104,"props":195,"children":196},{},[197,202],{"type":19,"tag":132,"props":198,"children":199},{},[200],{"type":28,"value":201},"header()",{"type":19,"tag":132,"props":203,"children":204},{},[205],{"type":28,"value":206},"树的头信息，常用的有一个setVisible()方法，用来设置是否显示头",{"type":19,"tag":104,"props":208,"children":209},{},[210,215],{"type":19,"tag":132,"props":211,"children":212},{},[213],{"type":28,"value":214},"isHeaderHidder()",{"type":19,"tag":132,"props":216,"children":217},{},[218],{"type":28,"value":219},"判断是否隐藏头部",{"type":19,"tag":104,"props":221,"children":222},{},[223,228],{"type":19,"tag":132,"props":224,"children":225},{},[226],{"type":28,"value":227},"setAutoExpandDelay()",{"type":19,"tag":132,"props":229,"children":230},{},[231],{"type":28,"value":232},"设置自动展开的延时时间，单位为毫秒，如果值小于0，表示禁用自动展开",{"type":19,"tag":104,"props":234,"children":235},{},[236,241],{"type":19,"tag":132,"props":237,"children":238},{},[239],{"type":28,"value":240},"setAlternatingRowColors()",{"type":19,"tag":132,"props":242,"children":243},{},[244],{"type":28,"value":245},"设置每间隔一行颜色是否一样",{"type":19,"tag":104,"props":247,"children":248},{},[249,254],{"type":19,"tag":132,"props":250,"children":251},{},[252],{"type":28,"value":253},"setExpanded()",{"type":19,"tag":132,"props":255,"children":256},{},[257],{"type":28,"value":258},"根据索引设置是否展开节点",{"type":19,"tag":104,"props":260,"children":261},{},[262,267],{"type":19,"tag":132,"props":263,"children":264},{},[265],{"type":28,"value":266},"setHeaderHidden()",{"type":19,"tag":132,"props":268,"children":269},{},[270],{"type":28,"value":271},"设置是否隐藏头部",{"type":19,"tag":104,"props":273,"children":274},{},[275,280],{"type":19,"tag":132,"props":276,"children":277},{},[278],{"type":28,"value":279},"setItemsExpandable()",{"type":19,"tag":132,"props":281,"children":282},{},[283],{"type":28,"value":284},"设置项是否展开",{"type":19,"tag":104,"props":286,"children":287},{},[288,293],{"type":19,"tag":132,"props":289,"children":290},{},[291],{"type":28,"value":292},"setModel()",{"type":19,"tag":132,"props":294,"children":295},{},[296],{"type":28,"value":297},"设置要显示的数据模型",{"type":19,"tag":104,"props":299,"children":300},{},[301,306],{"type":19,"tag":132,"props":302,"children":303},{},[304],{"type":28,"value":305},"setSortingEnabled()",{"type":19,"tag":132,"props":307,"children":308},{},[309],{"type":28,"value":310},"设置单击头部时是否可以排序",{"type":19,"tag":104,"props":312,"children":313},{},[314,319],{"type":19,"tag":132,"props":315,"children":316},{},[317],{"type":28,"value":318},"setVerticalScrollBarPolicy()",{"type":19,"tag":132,"props":320,"children":321},{},[322],{"type":28,"value":323},"设置是否显示垂直滚动条",{"type":19,"tag":104,"props":325,"children":326},{},[327,332],{"type":19,"tag":132,"props":328,"children":329},{},[330],{"type":28,"value":331},"setHorizontalScrollBarPolicy()",{"type":19,"tag":132,"props":333,"children":334},{},[335],{"type":28,"value":336},"设置是否显示水平滚动条",{"type":19,"tag":104,"props":338,"children":339},{},[340,345],{"type":19,"tag":132,"props":341,"children":342},{},[343],{"type":28,"value":344},"setEditTriggers()",{"type":19,"tag":132,"props":346,"children":347},{},[348],{"type":28,"value":349},"设置默认的编辑触发器",{"type":19,"tag":104,"props":351,"children":352},{},[353,358],{"type":19,"tag":132,"props":354,"children":355},{},[356],{"type":28,"value":357},"setExpandsOnDoubleClick()",{"type":19,"tag":132,"props":359,"children":360},{},[361],{"type":28,"value":362},"设置是否支持双击展开树节点",{"type":19,"tag":104,"props":364,"children":365},{},[366,371],{"type":19,"tag":132,"props":367,"children":368},{},[369],{"type":28,"value":370},"setWordWrap()",{"type":19,"tag":132,"props":372,"children":373},{},[374],{"type":28,"value":375},"设置自动换行",{"type":19,"tag":104,"props":377,"children":378},{},[379,384],{"type":19,"tag":132,"props":380,"children":381},{},[382],{"type":28,"value":383},"selectionModel()",{"type":19,"tag":132,"props":385,"children":386},{},[387],{"type":28,"value":388},"获取选中的模型",{"type":19,"tag":104,"props":390,"children":391},{},[392,397],{"type":19,"tag":132,"props":393,"children":394},{},[395],{"type":28,"value":396},"sortByColumn()",{"type":19,"tag":132,"props":398,"children":399},{},[400],{"type":28,"value":401},"根据列排序",{"type":19,"tag":104,"props":403,"children":404},{},[405,410],{"type":19,"tag":132,"props":406,"children":407},{},[408],{"type":28,"value":409},"setSelectionMode()",{"type":19,"tag":132,"props":411,"children":412},{},[413,415,419,422,424,427,430,432,435,438,440,443,446,448],{"type":28,"value":414},"设置选中模式，取值如下：",{"type":19,"tag":416,"props":417,"children":418},"br",{},[],{"type":19,"tag":416,"props":420,"children":421},{},[],{"type":28,"value":423},"◆ QAbstractItemView.NoSelection：不能选择",{"type":19,"tag":416,"props":425,"children":426},{},[],{"type":19,"tag":416,"props":428,"children":429},{},[],{"type":28,"value":431},"◆ QAbstractItemView.SingleSelection：单选",{"type":19,"tag":416,"props":433,"children":434},{},[],{"type":19,"tag":416,"props":436,"children":437},{},[],{"type":28,"value":439},"◆ QAbstractItemView.MultiSelection：多选",{"type":19,"tag":416,"props":441,"children":442},{},[],{"type":19,"tag":416,"props":444,"children":445},{},[],{"type":28,"value":447},"◆ QAbstractItemView.ExtendedSelection：正常单选，按下",{"type":19,"tag":449,"props":450,"children":451},"ctrl",{},[452,454],{"type":28,"value":453},"或者     ",{"type":19,"tag":455,"props":456,"children":457},"shift",{},[458,460,463,466],{"type":28,"value":459},"键后，可以多选",{"type":19,"tag":416,"props":461,"children":462},{},[],{"type":19,"tag":416,"props":464,"children":465},{},[],{"type":28,"value":467},"◆ QAbstractItemView.ContiguousSelection：与ExtendedSelection类似",{"type":19,"tag":104,"props":469,"children":470},{},[471,476],{"type":19,"tag":132,"props":472,"children":473},{},[474],{"type":28,"value":475},"setSelectionBehavior()",{"type":19,"tag":132,"props":477,"children":478},{},[479,481,484,487,489,492,495,497,500,503],{"type":28,"value":480},"设置选中方式，取值如下：",{"type":19,"tag":416,"props":482,"children":483},{},[],{"type":19,"tag":416,"props":485,"children":486},{},[],{"type":28,"value":488},"◆ QAbstractItemView.SelectItems：选中当前项",{"type":19,"tag":416,"props":490,"children":491},{},[],{"type":19,"tag":416,"props":493,"children":494},{},[],{"type":28,"value":496},"◆ QAbstractItemView.SelectRows：选中整行",{"type":19,"tag":416,"props":498,"children":499},{},[],{"type":19,"tag":416,"props":501,"children":502},{},[],{"type":28,"value":504},"◆ QAbstractItemView.SelectColumns：选中整列",{"type":19,"tag":20,"props":506,"children":507},{},[508,510,515],{"type":28,"value":509},"下面分别介绍如何使用",{"type":19,"tag":33,"props":511,"children":513},{"className":512},[],[514],{"type":28,"value":38},{"type":28,"value":516},"控件分层显示PyQt5内置模型的数据和自定义的数据。",{"type":19,"tag":518,"props":519,"children":521},"h4",{"id":520},"_1使用内置模型中的数据",[522],{"type":28,"value":523},"1）使用内置模型中的数据",{"type":19,"tag":20,"props":525,"children":526},{},[527],{"type":28,"value":528},"PyQt5中提供的内置模型及说明如表所示。",{"type":19,"tag":96,"props":530,"children":531},{},[532,553],{"type":19,"tag":100,"props":533,"children":534},{},[535],{"type":19,"tag":104,"props":536,"children":537},{},[538,546],{"type":19,"tag":108,"props":539,"children":540},{},[541],{"type":19,"tag":24,"props":542,"children":543},{},[544],{"type":28,"value":545},"模    型",{"type":19,"tag":108,"props":547,"children":548},{},[549],{"type":19,"tag":24,"props":550,"children":551},{},[552],{"type":28,"value":123},{"type":19,"tag":125,"props":554,"children":555},{},[556,569,582,595,608,621,634,647],{"type":19,"tag":104,"props":557,"children":558},{},[559,564],{"type":19,"tag":132,"props":560,"children":561},{},[562],{"type":28,"value":563},"QStringListModel",{"type":19,"tag":132,"props":565,"children":566},{},[567],{"type":28,"value":568},"存储简单的字符串列表",{"type":19,"tag":104,"props":570,"children":571},{},[572,577],{"type":19,"tag":132,"props":573,"children":574},{},[575],{"type":28,"value":576},"QStandardItemModel",{"type":19,"tag":132,"props":578,"children":579},{},[580],{"type":28,"value":581},"可以用于树结构的存储，提供了层次数据",{"type":19,"tag":104,"props":583,"children":584},{},[585,590],{"type":19,"tag":132,"props":586,"children":587},{},[588],{"type":28,"value":589},"QFileSystemModel",{"type":19,"tag":132,"props":591,"children":592},{},[593],{"type":28,"value":594},"存储本地系统的文件和目录信息（针对当前项目）",{"type":19,"tag":104,"props":596,"children":597},{},[598,603],{"type":19,"tag":132,"props":599,"children":600},{},[601],{"type":28,"value":602},"QDirModel",{"type":19,"tag":132,"props":604,"children":605},{},[606],{"type":28,"value":607},"存储文件系统",{"type":19,"tag":104,"props":609,"children":610},{},[611,616],{"type":19,"tag":132,"props":612,"children":613},{},[614],{"type":28,"value":615},"QSqlQueryModel",{"type":19,"tag":132,"props":617,"children":618},{},[619],{"type":28,"value":620},"存储SQL中的查询结构集",{"type":19,"tag":104,"props":622,"children":623},{},[624,629],{"type":19,"tag":132,"props":625,"children":626},{},[627],{"type":28,"value":628},"QSqlTableModel",{"type":19,"tag":132,"props":630,"children":631},{},[632],{"type":28,"value":633},"存储SQL中的表格数据",{"type":19,"tag":104,"props":635,"children":636},{},[637,642],{"type":19,"tag":132,"props":638,"children":639},{},[640],{"type":28,"value":641},"QSqlRelationalTableModel",{"type":19,"tag":132,"props":643,"children":644},{},[645],{"type":28,"value":646},"存储有外键关系的SQL表格数据",{"type":19,"tag":104,"props":648,"children":649},{},[650,655],{"type":19,"tag":132,"props":651,"children":652},{},[653],{"type":28,"value":654},"QSortFilterProxyModel",{"type":19,"tag":132,"props":656,"children":657},{},[658],{"type":28,"value":659},"对模型中的数据进行排序或者过滤",{"type":19,"tag":20,"props":661,"children":662},{},[663],{"type":19,"tag":24,"props":664,"children":665},{},[666,668,673],{"type":28,"value":667},"实例 在",{"type":19,"tag":33,"props":669,"children":671},{"className":670},[],[672],{"type":28,"value":38},{"type":28,"value":674},"中显示系统文件目录",{"type":19,"tag":20,"props":676,"children":677},{},[678,680,685,687,692],{"type":28,"value":679},"使用系统内置的",{"type":19,"tag":33,"props":681,"children":683},{"className":682},[],[684],{"type":28,"value":602},{"type":28,"value":686},"作为数据模型，在",{"type":19,"tag":33,"props":688,"children":690},{"className":689},[],[691],{"type":28,"value":38},{"type":28,"value":693},"中显示系统的文件目录，代码如下：",{"type":19,"tag":695,"props":696,"children":700},"pre",{"className":697,"code":698,"language":699,"meta":7,"style":7},"language-python shiki shiki-themes github-dark","from PyQt5 import QtCore, QtGui, QtWidgets  \n  \nclass Ui_MainWindow(object):  \n  \n    def setupUi(self, MainWindow):  \n        MainWindow.setObjectName(\"MainWindow\")  \n        MainWindow.resize(469, 280)  \n        self.centralwidget = QtWidgets.QWidget(MainWindow)  \n        self.centralwidget.setObjectName(\"centralwidget\")  \n        self.treeView = QtWidgets.QTreeView(self.centralwidget) # 创建树对象  \n        self.treeView.setGeometry(QtCore.QRect(0, 0, 471, 281)) # 设置坐标位置和大小  \n        # 设置垂直滚动条为按需显示  \n        self.treeView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)  \n        # 设置水平滚动条为按需显示  \n        self.treeView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)  \n        # 设置双击或者按下回车键时，使树节点可编辑  \n        self.treeView.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)  \n        # 设置树节点为单选  \n        self.treeView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)  \n        # 设置选中节点时为整行选中  \n        self.treeView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)  \n        self.treeView.setAutoExpandDelay(-1) # 设置自动展开的延时为-1，表示自动展开不可用  \n        self.treeView.setItemsExpandable(True)    # 设置是否可以展开项  \n        self.treeView.setSortingEnabled(True)        # 设置单击头部可排序  \n        self.treeView.setWordWrap(True)         # 设置自动换行  \n        self.treeView.setHeaderHidden(False)         # 设置不隐藏头部  \n        self.treeView.setExpandsOnDoubleClick(True)    # 设置双击可以展开节点  \n        self.treeView.setObjectName(\"treeView\")  \n        self.treeView.header().setVisible(True) # 设置显示头部  \n        MainWindow.setCentralWidget(self.centralwidget)  \n        self.retranslateUi(MainWindow)  \n        QtCore.QMetaObject.connectSlotsByName(MainWindow)  \n        model =QtWidgets.QDirModel()           # 创建存储文件系统的模型  \n        self.treeView.setModel(model)           # 为树控件设置数据模型  \n  \n    def retranslateUi(self, MainWindow):  \n        _translate = QtCore.QCoreApplication.translate  \n        MainWindow.setWindowTitle(_translate(\"MainWindow\", \"MainWindow\"))  \n  \nimport sys  \n# 程序入口，程序从此处启动PyQt设计的窗体  \nif __name__ == '__main__':  \n   app = QtWidgets.QApplication(sys.argv)  \n   MainWindow = QtWidgets.QMainWindow()       # 创建窗体对象  \n   ui = Ui_MainWindow()     # 创建PyQt设计的窗体对象  \n   ui.setupUi(MainWindow)     # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n   MainWindow.show()         # 显示窗体  \n   sys.exit(app.exec_())     # 程序关闭时退出进程\n","python",[701],{"type":19,"tag":33,"props":702,"children":703},{"__ignoreMap":7},[704,715,724,733,741,750,759,768,777,786,795,804,813,822,831,840,849,858,867,876,885,894,903,912,921,930,939,948,957,966,975,984,993,1002,1011,1019,1028,1037,1046,1054,1063,1072,1081,1090,1099,1108,1117,1126],{"type":19,"tag":705,"props":706,"children":709},"span",{"class":707,"line":708},"line",1,[710],{"type":19,"tag":705,"props":711,"children":712},{},[713],{"type":28,"value":714},"from PyQt5 import QtCore, QtGui, QtWidgets  \n",{"type":19,"tag":705,"props":716,"children":718},{"class":707,"line":717},2,[719],{"type":19,"tag":705,"props":720,"children":721},{},[722],{"type":28,"value":723},"  \n",{"type":19,"tag":705,"props":725,"children":727},{"class":707,"line":726},3,[728],{"type":19,"tag":705,"props":729,"children":730},{},[731],{"type":28,"value":732},"class Ui_MainWindow(object):  \n",{"type":19,"tag":705,"props":734,"children":736},{"class":707,"line":735},4,[737],{"type":19,"tag":705,"props":738,"children":739},{},[740],{"type":28,"value":723},{"type":19,"tag":705,"props":742,"children":744},{"class":707,"line":743},5,[745],{"type":19,"tag":705,"props":746,"children":747},{},[748],{"type":28,"value":749},"    def setupUi(self, MainWindow):  \n",{"type":19,"tag":705,"props":751,"children":753},{"class":707,"line":752},6,[754],{"type":19,"tag":705,"props":755,"children":756},{},[757],{"type":28,"value":758},"        MainWindow.setObjectName(\"MainWindow\")  \n",{"type":19,"tag":705,"props":760,"children":762},{"class":707,"line":761},7,[763],{"type":19,"tag":705,"props":764,"children":765},{},[766],{"type":28,"value":767},"        MainWindow.resize(469, 280)  \n",{"type":19,"tag":705,"props":769,"children":771},{"class":707,"line":770},8,[772],{"type":19,"tag":705,"props":773,"children":774},{},[775],{"type":28,"value":776},"        self.centralwidget = QtWidgets.QWidget(MainWindow)  \n",{"type":19,"tag":705,"props":778,"children":780},{"class":707,"line":779},9,[781],{"type":19,"tag":705,"props":782,"children":783},{},[784],{"type":28,"value":785},"        self.centralwidget.setObjectName(\"centralwidget\")  \n",{"type":19,"tag":705,"props":787,"children":789},{"class":707,"line":788},10,[790],{"type":19,"tag":705,"props":791,"children":792},{},[793],{"type":28,"value":794},"        self.treeView = QtWidgets.QTreeView(self.centralwidget) # 创建树对象  \n",{"type":19,"tag":705,"props":796,"children":798},{"class":707,"line":797},11,[799],{"type":19,"tag":705,"props":800,"children":801},{},[802],{"type":28,"value":803},"        self.treeView.setGeometry(QtCore.QRect(0, 0, 471, 281)) # 设置坐标位置和大小  \n",{"type":19,"tag":705,"props":805,"children":807},{"class":707,"line":806},12,[808],{"type":19,"tag":705,"props":809,"children":810},{},[811],{"type":28,"value":812},"        # 设置垂直滚动条为按需显示  \n",{"type":19,"tag":705,"props":814,"children":816},{"class":707,"line":815},13,[817],{"type":19,"tag":705,"props":818,"children":819},{},[820],{"type":28,"value":821},"        self.treeView.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)  \n",{"type":19,"tag":705,"props":823,"children":825},{"class":707,"line":824},14,[826],{"type":19,"tag":705,"props":827,"children":828},{},[829],{"type":28,"value":830},"        # 设置水平滚动条为按需显示  \n",{"type":19,"tag":705,"props":832,"children":834},{"class":707,"line":833},15,[835],{"type":19,"tag":705,"props":836,"children":837},{},[838],{"type":28,"value":839},"        self.treeView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)  \n",{"type":19,"tag":705,"props":841,"children":843},{"class":707,"line":842},16,[844],{"type":19,"tag":705,"props":845,"children":846},{},[847],{"type":28,"value":848},"        # 设置双击或者按下回车键时，使树节点可编辑  \n",{"type":19,"tag":705,"props":850,"children":852},{"class":707,"line":851},17,[853],{"type":19,"tag":705,"props":854,"children":855},{},[856],{"type":28,"value":857},"        self.treeView.setEditTriggers(QtWidgets.QAbstractItemView.DoubleClicked|QtWidgets.QAbstractItemView.EditKeyPressed)  \n",{"type":19,"tag":705,"props":859,"children":861},{"class":707,"line":860},18,[862],{"type":19,"tag":705,"props":863,"children":864},{},[865],{"type":28,"value":866},"        # 设置树节点为单选  \n",{"type":19,"tag":705,"props":868,"children":870},{"class":707,"line":869},19,[871],{"type":19,"tag":705,"props":872,"children":873},{},[874],{"type":28,"value":875},"        self.treeView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)  \n",{"type":19,"tag":705,"props":877,"children":879},{"class":707,"line":878},20,[880],{"type":19,"tag":705,"props":881,"children":882},{},[883],{"type":28,"value":884},"        # 设置选中节点时为整行选中  \n",{"type":19,"tag":705,"props":886,"children":888},{"class":707,"line":887},21,[889],{"type":19,"tag":705,"props":890,"children":891},{},[892],{"type":28,"value":893},"        self.treeView.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)  \n",{"type":19,"tag":705,"props":895,"children":897},{"class":707,"line":896},22,[898],{"type":19,"tag":705,"props":899,"children":900},{},[901],{"type":28,"value":902},"        self.treeView.setAutoExpandDelay(-1) # 设置自动展开的延时为-1，表示自动展开不可用  \n",{"type":19,"tag":705,"props":904,"children":906},{"class":707,"line":905},23,[907],{"type":19,"tag":705,"props":908,"children":909},{},[910],{"type":28,"value":911},"        self.treeView.setItemsExpandable(True)    # 设置是否可以展开项  \n",{"type":19,"tag":705,"props":913,"children":915},{"class":707,"line":914},24,[916],{"type":19,"tag":705,"props":917,"children":918},{},[919],{"type":28,"value":920},"        self.treeView.setSortingEnabled(True)        # 设置单击头部可排序  \n",{"type":19,"tag":705,"props":922,"children":924},{"class":707,"line":923},25,[925],{"type":19,"tag":705,"props":926,"children":927},{},[928],{"type":28,"value":929},"        self.treeView.setWordWrap(True)         # 设置自动换行  \n",{"type":19,"tag":705,"props":931,"children":933},{"class":707,"line":932},26,[934],{"type":19,"tag":705,"props":935,"children":936},{},[937],{"type":28,"value":938},"        self.treeView.setHeaderHidden(False)         # 设置不隐藏头部  \n",{"type":19,"tag":705,"props":940,"children":942},{"class":707,"line":941},27,[943],{"type":19,"tag":705,"props":944,"children":945},{},[946],{"type":28,"value":947},"        self.treeView.setExpandsOnDoubleClick(True)    # 设置双击可以展开节点  \n",{"type":19,"tag":705,"props":949,"children":951},{"class":707,"line":950},28,[952],{"type":19,"tag":705,"props":953,"children":954},{},[955],{"type":28,"value":956},"        self.treeView.setObjectName(\"treeView\")  \n",{"type":19,"tag":705,"props":958,"children":960},{"class":707,"line":959},29,[961],{"type":19,"tag":705,"props":962,"children":963},{},[964],{"type":28,"value":965},"        self.treeView.header().setVisible(True) # 设置显示头部  \n",{"type":19,"tag":705,"props":967,"children":969},{"class":707,"line":968},30,[970],{"type":19,"tag":705,"props":971,"children":972},{},[973],{"type":28,"value":974},"        MainWindow.setCentralWidget(self.centralwidget)  \n",{"type":19,"tag":705,"props":976,"children":978},{"class":707,"line":977},31,[979],{"type":19,"tag":705,"props":980,"children":981},{},[982],{"type":28,"value":983},"        self.retranslateUi(MainWindow)  \n",{"type":19,"tag":705,"props":985,"children":987},{"class":707,"line":986},32,[988],{"type":19,"tag":705,"props":989,"children":990},{},[991],{"type":28,"value":992},"        QtCore.QMetaObject.connectSlotsByName(MainWindow)  \n",{"type":19,"tag":705,"props":994,"children":996},{"class":707,"line":995},33,[997],{"type":19,"tag":705,"props":998,"children":999},{},[1000],{"type":28,"value":1001},"        model =QtWidgets.QDirModel()           # 创建存储文件系统的模型  \n",{"type":19,"tag":705,"props":1003,"children":1005},{"class":707,"line":1004},34,[1006],{"type":19,"tag":705,"props":1007,"children":1008},{},[1009],{"type":28,"value":1010},"        self.treeView.setModel(model)           # 为树控件设置数据模型  \n",{"type":19,"tag":705,"props":1012,"children":1014},{"class":707,"line":1013},35,[1015],{"type":19,"tag":705,"props":1016,"children":1017},{},[1018],{"type":28,"value":723},{"type":19,"tag":705,"props":1020,"children":1022},{"class":707,"line":1021},36,[1023],{"type":19,"tag":705,"props":1024,"children":1025},{},[1026],{"type":28,"value":1027},"    def retranslateUi(self, MainWindow):  \n",{"type":19,"tag":705,"props":1029,"children":1031},{"class":707,"line":1030},37,[1032],{"type":19,"tag":705,"props":1033,"children":1034},{},[1035],{"type":28,"value":1036},"        _translate = QtCore.QCoreApplication.translate  \n",{"type":19,"tag":705,"props":1038,"children":1040},{"class":707,"line":1039},38,[1041],{"type":19,"tag":705,"props":1042,"children":1043},{},[1044],{"type":28,"value":1045},"        MainWindow.setWindowTitle(_translate(\"MainWindow\", \"MainWindow\"))  \n",{"type":19,"tag":705,"props":1047,"children":1049},{"class":707,"line":1048},39,[1050],{"type":19,"tag":705,"props":1051,"children":1052},{},[1053],{"type":28,"value":723},{"type":19,"tag":705,"props":1055,"children":1057},{"class":707,"line":1056},40,[1058],{"type":19,"tag":705,"props":1059,"children":1060},{},[1061],{"type":28,"value":1062},"import sys  \n",{"type":19,"tag":705,"props":1064,"children":1066},{"class":707,"line":1065},41,[1067],{"type":19,"tag":705,"props":1068,"children":1069},{},[1070],{"type":28,"value":1071},"# 程序入口，程序从此处启动PyQt设计的窗体  \n",{"type":19,"tag":705,"props":1073,"children":1075},{"class":707,"line":1074},42,[1076],{"type":19,"tag":705,"props":1077,"children":1078},{},[1079],{"type":28,"value":1080},"if __name__ == '__main__':  \n",{"type":19,"tag":705,"props":1082,"children":1084},{"class":707,"line":1083},43,[1085],{"type":19,"tag":705,"props":1086,"children":1087},{},[1088],{"type":28,"value":1089},"   app = QtWidgets.QApplication(sys.argv)  \n",{"type":19,"tag":705,"props":1091,"children":1093},{"class":707,"line":1092},44,[1094],{"type":19,"tag":705,"props":1095,"children":1096},{},[1097],{"type":28,"value":1098},"   MainWindow = QtWidgets.QMainWindow()       # 创建窗体对象  \n",{"type":19,"tag":705,"props":1100,"children":1102},{"class":707,"line":1101},45,[1103],{"type":19,"tag":705,"props":1104,"children":1105},{},[1106],{"type":28,"value":1107},"   ui = Ui_MainWindow()     # 创建PyQt设计的窗体对象  \n",{"type":19,"tag":705,"props":1109,"children":1111},{"class":707,"line":1110},46,[1112],{"type":19,"tag":705,"props":1113,"children":1114},{},[1115],{"type":28,"value":1116},"   ui.setupUi(MainWindow)     # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n",{"type":19,"tag":705,"props":1118,"children":1120},{"class":707,"line":1119},47,[1121],{"type":19,"tag":705,"props":1122,"children":1123},{},[1124],{"type":28,"value":1125},"   MainWindow.show()         # 显示窗体  \n",{"type":19,"tag":705,"props":1127,"children":1129},{"class":707,"line":1128},48,[1130],{"type":19,"tag":705,"props":1131,"children":1132},{},[1133],{"type":28,"value":1134},"   sys.exit(app.exec_())     # 程序关闭时退出进程\n",{"type":19,"tag":20,"props":1136,"children":1137},{},[1138],{"type":28,"value":1139},"运行程序，效果如图所示。",{"type":19,"tag":20,"props":1141,"children":1142},{},[1143],{"type":19,"tag":1144,"props":1145,"children":1148},"img",{"alt":1146,"src":1147},"Pasted image 20250903155813","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903155813.png",[],{"type":19,"tag":518,"props":1150,"children":1152},{"id":1151},"_2使用自定义数据",[1153],{"type":28,"value":1154},"2）使用自定义数据",{"type":19,"tag":20,"props":1156,"children":1157},{},[1158,1160,1165,1167,1172,1174,1179],{"type":28,"value":1159},"PyQt5中提供了一个",{"type":19,"tag":33,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":28,"value":576},{"type":28,"value":1166},"模型，该模型可以存储任意层次结构的数据，本节将介绍如何使用",{"type":19,"tag":33,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":28,"value":576},{"type":28,"value":1173},"模型存储数据，并显示在",{"type":19,"tag":33,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":28,"value":38},{"type":28,"value":1180},"控件中。",{"type":19,"tag":20,"props":1182,"children":1183},{},[1184],{"type":19,"tag":24,"props":1185,"children":1186},{},[1187,1189,1194],{"type":28,"value":1188},"实例 使用",{"type":19,"tag":33,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":28,"value":38},{"type":28,"value":1195},"显示各个班级的学生成绩信息",{"type":19,"tag":20,"props":1197,"children":1198},{},[1199,1201,1206,1208,1214,1216,1221,1223,1228,1230,1235],{"type":28,"value":1200},"创建一个PyQt5窗口，并在其中添加一个",{"type":19,"tag":33,"props":1202,"children":1204},{"className":1203},[],[1205],{"type":28,"value":38},{"type":28,"value":1207},"控件，然后在",{"type":19,"tag":33,"props":1209,"children":1211},{"className":1210},[],[1212],{"type":28,"value":1213},".py",{"type":28,"value":1215},"文件中使用",{"type":19,"tag":33,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":28,"value":576},{"type":28,"value":1222},"模型存储某年级下的各个班级的学生成绩信息，最后将设置完的",{"type":19,"tag":33,"props":1224,"children":1226},{"className":1225},[],[1227],{"type":28,"value":576},{"type":28,"value":1229},"模型作为",{"type":19,"tag":33,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":28,"value":38},{"type":28,"value":1236},"控件的数据模型进行显示。代码如下：",{"type":19,"tag":695,"props":1238,"children":1240},{"className":697,"code":1239,"language":699,"meta":7,"style":7},"from PyQt5 import QtCore, QtGui, QtWidgets  \n  \nclass Ui_MainWindow(object):  \n  \n    def setupUi(self, MainWindow):  \n        MainWindow.setObjectName(\"MainWindow\")  \n        MainWindow.resize(422, 197)  \n        self.centralwidget = QtWidgets.QWidget(MainWindow)  \n        self.centralwidget.setObjectName(\"centralwidget\")  \n        # 创建一个TreeView树视图  \n        self.treeView = QtWidgets.QTreeView(self.centralwidget)  \n        self.treeView.setGeometry(QtCore.QRect(0, 0, 421, 201))  \n        self.treeView.setObjectName(\"treeView\")  \n        MainWindow.setCentralWidget(self.centralwidget)  \n        self.retranslateUi(MainWindow)  \n        QtCore.QMetaObject.connectSlotsByName(MainWindow)  \n        model = QtGui.QStandardItemModel()      # 创建数据模型  \n        model.setHorizontalHeaderLabels(['年级','班级','姓名','分数'])  \n  \n        # 姓名列表  \n        name=['马云','马化腾','李彦宏','王兴','刘强东','董明珠','张一鸣','任正非','丁磊','程维']  \n        score=[65,89,45,68,90,100,99,76,85,73] # 分数列表  \n  \n        import  random  \n        # 设置数据  \n        for i in range(0,6):  \n            # 一级节点：年级，只设第1列的数据  \n            grade = QtGui.QStandardItem((\"%s年级\")%(i + 1))  \n            model.appendRow(grade)          # 一级节点  \n            for j in range(0,4):  \n                # 二级节点：班级、姓名、分数  \n                itemClass = QtGui.QStandardItem((\"%s班\")%(j+1))  \n                itemName = QtGui.QStandardItem(name[random.randrange(10)])  \n                itemScore = QtGui.QStandardItem(str(score[random.randrange(10)]))  \n                # 将二级节点添加到一级节点上  \n                grade.appendRow([QtGui.QStandardItem(\"\"),itemClass,itemName,itemScore])  \n        self.treeView.setModel(model)          # 为TreeVIew设置数据模型  \n  \n    def retranslateUi(self, MainWindow):  \n        _translate = QtCore.QCoreApplication.translate  \n        MainWindow.setWindowTitle(_translate(\"MainWindow\", \"MainWindow\"))  \n  \nimport sys  \n# 程序入口，程序从此处启动PyQt设计的窗体  \nif __name__ == '__main__':  \n   app = QtWidgets.QApplication(sys.argv)  \n   MainWindow = QtWidgets.QMainWindow()      # 创建窗体对象  \n   ui = Ui_MainWindow()              # 创建PyQt设计的窗体对象  \n   ui.setupUi(MainWindow)            # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n   MainWindow.show()                 # 显示窗体  \n   sys.exit(app.exec_())             # 程序关闭时退出进程\n",[1241],{"type":19,"tag":33,"props":1242,"children":1243},{"__ignoreMap":7},[1244,1251,1258,1265,1272,1279,1286,1294,1301,1308,1316,1324,1332,1339,1346,1353,1360,1368,1376,1383,1391,1399,1407,1414,1422,1430,1438,1446,1454,1462,1470,1478,1486,1494,1502,1510,1518,1526,1533,1540,1547,1554,1561,1568,1575,1582,1589,1597,1605,1614,1623],{"type":19,"tag":705,"props":1245,"children":1246},{"class":707,"line":708},[1247],{"type":19,"tag":705,"props":1248,"children":1249},{},[1250],{"type":28,"value":714},{"type":19,"tag":705,"props":1252,"children":1253},{"class":707,"line":717},[1254],{"type":19,"tag":705,"props":1255,"children":1256},{},[1257],{"type":28,"value":723},{"type":19,"tag":705,"props":1259,"children":1260},{"class":707,"line":726},[1261],{"type":19,"tag":705,"props":1262,"children":1263},{},[1264],{"type":28,"value":732},{"type":19,"tag":705,"props":1266,"children":1267},{"class":707,"line":735},[1268],{"type":19,"tag":705,"props":1269,"children":1270},{},[1271],{"type":28,"value":723},{"type":19,"tag":705,"props":1273,"children":1274},{"class":707,"line":743},[1275],{"type":19,"tag":705,"props":1276,"children":1277},{},[1278],{"type":28,"value":749},{"type":19,"tag":705,"props":1280,"children":1281},{"class":707,"line":752},[1282],{"type":19,"tag":705,"props":1283,"children":1284},{},[1285],{"type":28,"value":758},{"type":19,"tag":705,"props":1287,"children":1288},{"class":707,"line":761},[1289],{"type":19,"tag":705,"props":1290,"children":1291},{},[1292],{"type":28,"value":1293},"        MainWindow.resize(422, 197)  \n",{"type":19,"tag":705,"props":1295,"children":1296},{"class":707,"line":770},[1297],{"type":19,"tag":705,"props":1298,"children":1299},{},[1300],{"type":28,"value":776},{"type":19,"tag":705,"props":1302,"children":1303},{"class":707,"line":779},[1304],{"type":19,"tag":705,"props":1305,"children":1306},{},[1307],{"type":28,"value":785},{"type":19,"tag":705,"props":1309,"children":1310},{"class":707,"line":788},[1311],{"type":19,"tag":705,"props":1312,"children":1313},{},[1314],{"type":28,"value":1315},"        # 创建一个TreeView树视图  \n",{"type":19,"tag":705,"props":1317,"children":1318},{"class":707,"line":797},[1319],{"type":19,"tag":705,"props":1320,"children":1321},{},[1322],{"type":28,"value":1323},"        self.treeView = QtWidgets.QTreeView(self.centralwidget)  \n",{"type":19,"tag":705,"props":1325,"children":1326},{"class":707,"line":806},[1327],{"type":19,"tag":705,"props":1328,"children":1329},{},[1330],{"type":28,"value":1331},"        self.treeView.setGeometry(QtCore.QRect(0, 0, 421, 201))  \n",{"type":19,"tag":705,"props":1333,"children":1334},{"class":707,"line":815},[1335],{"type":19,"tag":705,"props":1336,"children":1337},{},[1338],{"type":28,"value":956},{"type":19,"tag":705,"props":1340,"children":1341},{"class":707,"line":824},[1342],{"type":19,"tag":705,"props":1343,"children":1344},{},[1345],{"type":28,"value":974},{"type":19,"tag":705,"props":1347,"children":1348},{"class":707,"line":833},[1349],{"type":19,"tag":705,"props":1350,"children":1351},{},[1352],{"type":28,"value":983},{"type":19,"tag":705,"props":1354,"children":1355},{"class":707,"line":842},[1356],{"type":19,"tag":705,"props":1357,"children":1358},{},[1359],{"type":28,"value":992},{"type":19,"tag":705,"props":1361,"children":1362},{"class":707,"line":851},[1363],{"type":19,"tag":705,"props":1364,"children":1365},{},[1366],{"type":28,"value":1367},"        model = QtGui.QStandardItemModel()      # 创建数据模型  \n",{"type":19,"tag":705,"props":1369,"children":1370},{"class":707,"line":860},[1371],{"type":19,"tag":705,"props":1372,"children":1373},{},[1374],{"type":28,"value":1375},"        model.setHorizontalHeaderLabels(['年级','班级','姓名','分数'])  \n",{"type":19,"tag":705,"props":1377,"children":1378},{"class":707,"line":869},[1379],{"type":19,"tag":705,"props":1380,"children":1381},{},[1382],{"type":28,"value":723},{"type":19,"tag":705,"props":1384,"children":1385},{"class":707,"line":878},[1386],{"type":19,"tag":705,"props":1387,"children":1388},{},[1389],{"type":28,"value":1390},"        # 姓名列表  \n",{"type":19,"tag":705,"props":1392,"children":1393},{"class":707,"line":887},[1394],{"type":19,"tag":705,"props":1395,"children":1396},{},[1397],{"type":28,"value":1398},"        name=['马云','马化腾','李彦宏','王兴','刘强东','董明珠','张一鸣','任正非','丁磊','程维']  \n",{"type":19,"tag":705,"props":1400,"children":1401},{"class":707,"line":896},[1402],{"type":19,"tag":705,"props":1403,"children":1404},{},[1405],{"type":28,"value":1406},"        score=[65,89,45,68,90,100,99,76,85,73] # 分数列表  \n",{"type":19,"tag":705,"props":1408,"children":1409},{"class":707,"line":905},[1410],{"type":19,"tag":705,"props":1411,"children":1412},{},[1413],{"type":28,"value":723},{"type":19,"tag":705,"props":1415,"children":1416},{"class":707,"line":914},[1417],{"type":19,"tag":705,"props":1418,"children":1419},{},[1420],{"type":28,"value":1421},"        import  random  \n",{"type":19,"tag":705,"props":1423,"children":1424},{"class":707,"line":923},[1425],{"type":19,"tag":705,"props":1426,"children":1427},{},[1428],{"type":28,"value":1429},"        # 设置数据  \n",{"type":19,"tag":705,"props":1431,"children":1432},{"class":707,"line":932},[1433],{"type":19,"tag":705,"props":1434,"children":1435},{},[1436],{"type":28,"value":1437},"        for i in range(0,6):  \n",{"type":19,"tag":705,"props":1439,"children":1440},{"class":707,"line":941},[1441],{"type":19,"tag":705,"props":1442,"children":1443},{},[1444],{"type":28,"value":1445},"            # 一级节点：年级，只设第1列的数据  \n",{"type":19,"tag":705,"props":1447,"children":1448},{"class":707,"line":950},[1449],{"type":19,"tag":705,"props":1450,"children":1451},{},[1452],{"type":28,"value":1453},"            grade = QtGui.QStandardItem((\"%s年级\")%(i + 1))  \n",{"type":19,"tag":705,"props":1455,"children":1456},{"class":707,"line":959},[1457],{"type":19,"tag":705,"props":1458,"children":1459},{},[1460],{"type":28,"value":1461},"            model.appendRow(grade)          # 一级节点  \n",{"type":19,"tag":705,"props":1463,"children":1464},{"class":707,"line":968},[1465],{"type":19,"tag":705,"props":1466,"children":1467},{},[1468],{"type":28,"value":1469},"            for j in range(0,4):  \n",{"type":19,"tag":705,"props":1471,"children":1472},{"class":707,"line":977},[1473],{"type":19,"tag":705,"props":1474,"children":1475},{},[1476],{"type":28,"value":1477},"                # 二级节点：班级、姓名、分数  \n",{"type":19,"tag":705,"props":1479,"children":1480},{"class":707,"line":986},[1481],{"type":19,"tag":705,"props":1482,"children":1483},{},[1484],{"type":28,"value":1485},"                itemClass = QtGui.QStandardItem((\"%s班\")%(j+1))  \n",{"type":19,"tag":705,"props":1487,"children":1488},{"class":707,"line":995},[1489],{"type":19,"tag":705,"props":1490,"children":1491},{},[1492],{"type":28,"value":1493},"                itemName = QtGui.QStandardItem(name[random.randrange(10)])  \n",{"type":19,"tag":705,"props":1495,"children":1496},{"class":707,"line":1004},[1497],{"type":19,"tag":705,"props":1498,"children":1499},{},[1500],{"type":28,"value":1501},"                itemScore = QtGui.QStandardItem(str(score[random.randrange(10)]))  \n",{"type":19,"tag":705,"props":1503,"children":1504},{"class":707,"line":1013},[1505],{"type":19,"tag":705,"props":1506,"children":1507},{},[1508],{"type":28,"value":1509},"                # 将二级节点添加到一级节点上  \n",{"type":19,"tag":705,"props":1511,"children":1512},{"class":707,"line":1021},[1513],{"type":19,"tag":705,"props":1514,"children":1515},{},[1516],{"type":28,"value":1517},"                grade.appendRow([QtGui.QStandardItem(\"\"),itemClass,itemName,itemScore])  \n",{"type":19,"tag":705,"props":1519,"children":1520},{"class":707,"line":1030},[1521],{"type":19,"tag":705,"props":1522,"children":1523},{},[1524],{"type":28,"value":1525},"        self.treeView.setModel(model)          # 为TreeVIew设置数据模型  \n",{"type":19,"tag":705,"props":1527,"children":1528},{"class":707,"line":1039},[1529],{"type":19,"tag":705,"props":1530,"children":1531},{},[1532],{"type":28,"value":723},{"type":19,"tag":705,"props":1534,"children":1535},{"class":707,"line":1048},[1536],{"type":19,"tag":705,"props":1537,"children":1538},{},[1539],{"type":28,"value":1027},{"type":19,"tag":705,"props":1541,"children":1542},{"class":707,"line":1056},[1543],{"type":19,"tag":705,"props":1544,"children":1545},{},[1546],{"type":28,"value":1036},{"type":19,"tag":705,"props":1548,"children":1549},{"class":707,"line":1065},[1550],{"type":19,"tag":705,"props":1551,"children":1552},{},[1553],{"type":28,"value":1045},{"type":19,"tag":705,"props":1555,"children":1556},{"class":707,"line":1074},[1557],{"type":19,"tag":705,"props":1558,"children":1559},{},[1560],{"type":28,"value":723},{"type":19,"tag":705,"props":1562,"children":1563},{"class":707,"line":1083},[1564],{"type":19,"tag":705,"props":1565,"children":1566},{},[1567],{"type":28,"value":1062},{"type":19,"tag":705,"props":1569,"children":1570},{"class":707,"line":1092},[1571],{"type":19,"tag":705,"props":1572,"children":1573},{},[1574],{"type":28,"value":1071},{"type":19,"tag":705,"props":1576,"children":1577},{"class":707,"line":1101},[1578],{"type":19,"tag":705,"props":1579,"children":1580},{},[1581],{"type":28,"value":1080},{"type":19,"tag":705,"props":1583,"children":1584},{"class":707,"line":1110},[1585],{"type":19,"tag":705,"props":1586,"children":1587},{},[1588],{"type":28,"value":1089},{"type":19,"tag":705,"props":1590,"children":1591},{"class":707,"line":1119},[1592],{"type":19,"tag":705,"props":1593,"children":1594},{},[1595],{"type":28,"value":1596},"   MainWindow = QtWidgets.QMainWindow()      # 创建窗体对象  \n",{"type":19,"tag":705,"props":1598,"children":1599},{"class":707,"line":1128},[1600],{"type":19,"tag":705,"props":1601,"children":1602},{},[1603],{"type":28,"value":1604},"   ui = Ui_MainWindow()              # 创建PyQt设计的窗体对象  \n",{"type":19,"tag":705,"props":1606,"children":1608},{"class":707,"line":1607},49,[1609],{"type":19,"tag":705,"props":1610,"children":1611},{},[1612],{"type":28,"value":1613},"   ui.setupUi(MainWindow)            # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n",{"type":19,"tag":705,"props":1615,"children":1617},{"class":707,"line":1616},50,[1618],{"type":19,"tag":705,"props":1619,"children":1620},{},[1621],{"type":28,"value":1622},"   MainWindow.show()                 # 显示窗体  \n",{"type":19,"tag":705,"props":1624,"children":1626},{"class":707,"line":1625},51,[1627],{"type":19,"tag":705,"props":1628,"children":1629},{},[1630],{"type":28,"value":1631},"   sys.exit(app.exec_())             # 程序关闭时退出进程\n",{"type":19,"tag":20,"props":1633,"children":1634},{},[1635],{"type":28,"value":1636},"运行程序，展开年级节点，效果如图所示。",{"type":19,"tag":20,"props":1638,"children":1639},{},[1640],{"type":19,"tag":1144,"props":1641,"children":1644},{"alt":1642,"src":1643},"Pasted image 20250903160241","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903160241.png",[],{"type":19,"tag":50,"props":1646,"children":1648},{"id":1647},"_2treewidget树控件",[1649,1651,1656],{"type":28,"value":1650},"2  ",{"type":19,"tag":33,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":28,"value":46},{"type":28,"value":1657},"：树控件",{"type":19,"tag":64,"props":1659,"children":1660},{},[],{"type":19,"tag":20,"props":1662,"children":1663},{},[1664,1669,1671,1677,1679,1685],{"type":19,"tag":33,"props":1665,"children":1667},{"className":1666},[],[1668],{"type":28,"value":46},{"type":28,"value":1670},"树控件对应PyQt5中的",{"type":19,"tag":33,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":28,"value":1676},"QTreeWidget",{"type":28,"value":1678},"类，它提供了一个使用预定义树模型的树视图，它的每一个树节点都是一个",{"type":19,"tag":33,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":28,"value":1684},"QTreeWidgetItem",{"type":28,"value":1686},"。",{"type":19,"tag":20,"props":1688,"children":1689},{},[1690,1692,1697,1699,1704,1706,1711],{"type":28,"value":1691},"由于",{"type":19,"tag":33,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":28,"value":1676},{"type":28,"value":1698},"类继承自",{"type":19,"tag":33,"props":1700,"children":1702},{"className":1701},[],[1703],{"type":28,"value":82},{"type":28,"value":1705},"，因此它具有",{"type":19,"tag":33,"props":1707,"children":1709},{"className":1708},[],[1710],{"type":28,"value":82},{"type":28,"value":1712},"的所有公共方法。另外，它还提供了一些自身特有的方法，如表所示。",{"type":19,"tag":96,"props":1714,"children":1715},{},[1716,1736],{"type":19,"tag":100,"props":1717,"children":1718},{},[1719],{"type":19,"tag":104,"props":1720,"children":1721},{},[1722,1729],{"type":19,"tag":108,"props":1723,"children":1724},{},[1725],{"type":19,"tag":24,"props":1726,"children":1727},{},[1728],{"type":28,"value":115},{"type":19,"tag":108,"props":1730,"children":1731},{},[1732],{"type":19,"tag":24,"props":1733,"children":1734},{},[1735],{"type":28,"value":123},{"type":19,"tag":125,"props":1737,"children":1738},{},[1739,1752,1765,1778,1791,1804],{"type":19,"tag":104,"props":1740,"children":1741},{},[1742,1747],{"type":19,"tag":132,"props":1743,"children":1744},{},[1745],{"type":28,"value":1746},"addTopLevelItem()",{"type":19,"tag":132,"props":1748,"children":1749},{},[1750],{"type":28,"value":1751},"添加顶级节点",{"type":19,"tag":104,"props":1753,"children":1754},{},[1755,1760],{"type":19,"tag":132,"props":1756,"children":1757},{},[1758],{"type":28,"value":1759},"insertTopLevelItems()",{"type":19,"tag":132,"props":1761,"children":1762},{},[1763],{"type":28,"value":1764},"在树的顶层索引中插入节点",{"type":19,"tag":104,"props":1766,"children":1767},{},[1768,1773],{"type":19,"tag":132,"props":1769,"children":1770},{},[1771],{"type":28,"value":1772},"invisibleRootItem()",{"type":19,"tag":132,"props":1774,"children":1775},{},[1776],{"type":28,"value":1777},"获取树控件中不可见的根选项",{"type":19,"tag":104,"props":1779,"children":1780},{},[1781,1786],{"type":19,"tag":132,"props":1782,"children":1783},{},[1784],{"type":28,"value":1785},"setColumnCount()",{"type":19,"tag":132,"props":1787,"children":1788},{},[1789],{"type":28,"value":1790},"设置要显示的列数",{"type":19,"tag":104,"props":1792,"children":1793},{},[1794,1799],{"type":19,"tag":132,"props":1795,"children":1796},{},[1797],{"type":28,"value":1798},"setColumnWidth()",{"type":19,"tag":132,"props":1800,"children":1801},{},[1802],{"type":28,"value":1803},"设置列的宽度",{"type":19,"tag":104,"props":1805,"children":1806},{},[1807,1812],{"type":19,"tag":132,"props":1808,"children":1809},{},[1810],{"type":28,"value":1811},"selectedItems()",{"type":19,"tag":132,"props":1813,"children":1814},{},[1815],{"type":28,"value":1816},"获取选中的树节点",{"type":19,"tag":20,"props":1818,"children":1819},{},[1820,1825,1827,1832],{"type":19,"tag":33,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":28,"value":1684},{"type":28,"value":1826},"类表示",{"type":19,"tag":33,"props":1828,"children":1830},{"className":1829},[],[1831],{"type":28,"value":1676},{"type":28,"value":1833},"中的树节点项，该类的常用方法如表所示。",{"type":19,"tag":96,"props":1835,"children":1836},{},[1837,1857],{"type":19,"tag":100,"props":1838,"children":1839},{},[1840],{"type":19,"tag":104,"props":1841,"children":1842},{},[1843,1850],{"type":19,"tag":108,"props":1844,"children":1845},{},[1846],{"type":19,"tag":24,"props":1847,"children":1848},{},[1849],{"type":28,"value":115},{"type":19,"tag":108,"props":1851,"children":1852},{},[1853],{"type":19,"tag":24,"props":1854,"children":1855},{},[1856],{"type":28,"value":123},{"type":19,"tag":125,"props":1858,"children":1859},{},[1860,1873,1886,1915,1928],{"type":19,"tag":104,"props":1861,"children":1862},{},[1863,1868],{"type":19,"tag":132,"props":1864,"children":1865},{},[1866],{"type":28,"value":1867},"addChild()",{"type":19,"tag":132,"props":1869,"children":1870},{},[1871],{"type":28,"value":1872},"添加子节点",{"type":19,"tag":104,"props":1874,"children":1875},{},[1876,1881],{"type":19,"tag":132,"props":1877,"children":1878},{},[1879],{"type":28,"value":1880},"setText()",{"type":19,"tag":132,"props":1882,"children":1883},{},[1884],{"type":28,"value":1885},"设置节点的文本",{"type":19,"tag":104,"props":1887,"children":1888},{},[1889,1894],{"type":19,"tag":132,"props":1890,"children":1891},{},[1892],{"type":28,"value":1893},"setCheckState()",{"type":19,"tag":132,"props":1895,"children":1896},{},[1897,1899,1902,1905,1907,1910,1913],{"type":28,"value":1898},"设置指定节点的选中状态，取值如下：",{"type":19,"tag":416,"props":1900,"children":1901},{},[],{"type":19,"tag":416,"props":1903,"children":1904},{},[],{"type":28,"value":1906},"◆ Qt.Checked：节点选中",{"type":19,"tag":416,"props":1908,"children":1909},{},[],{"type":19,"tag":416,"props":1911,"children":1912},{},[],{"type":28,"value":1914},"◆ Qt.Unchecked：节点未选中",{"type":19,"tag":104,"props":1916,"children":1917},{},[1918,1923],{"type":19,"tag":132,"props":1919,"children":1920},{},[1921],{"type":28,"value":1922},"setIcon()",{"type":19,"tag":132,"props":1924,"children":1925},{},[1926],{"type":28,"value":1927},"为节点设置图标",{"type":19,"tag":104,"props":1929,"children":1930},{},[1931,1936],{"type":19,"tag":132,"props":1932,"children":1933},{},[1934],{"type":28,"value":1935},"text()",{"type":19,"tag":132,"props":1937,"children":1938},{},[1939],{"type":28,"value":1940},"获取节点的文本",{"type":19,"tag":20,"props":1942,"children":1943},{},[1944,1946,1951],{"type":28,"value":1945},"下面对",{"type":19,"tag":33,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":28,"value":46},{"type":28,"value":1952},"控件的常见用法进行讲解。",{"type":19,"tag":518,"props":1954,"children":1956},{"id":1955},"_1使用treewidget控件显示树结构",[1957,1959,1964],{"type":28,"value":1958},"1）使用",{"type":19,"tag":33,"props":1960,"children":1962},{"className":1961},[],[1963],{"type":28,"value":46},{"type":28,"value":1965},"控件显示树结构",{"type":19,"tag":20,"props":1967,"children":1968},{},[1969,1971,1976,1978,1983,1985,1991],{"type":28,"value":1970},"使用",{"type":19,"tag":33,"props":1972,"children":1974},{"className":1973},[],[1975],{"type":28,"value":46},{"type":28,"value":1977},"控件显示树结构主要用到",{"type":19,"tag":33,"props":1979,"children":1981},{"className":1980},[],[1982],{"type":28,"value":1684},{"type":28,"value":1984},"类，该类表示标准树节点，通过其",{"type":19,"tag":33,"props":1986,"children":1988},{"className":1987},[],[1989],{"type":28,"value":1990},"setText()方法",{"type":28,"value":1992},"可以设置树节点的文本。",{"type":19,"tag":20,"props":1994,"children":1995},{},[1996],{"type":19,"tag":24,"props":1997,"children":1998},{},[1999,2000,2005],{"type":28,"value":1188},{"type":19,"tag":33,"props":2001,"children":2003},{"className":2002},[],[2004],{"type":28,"value":46},{"type":28,"value":1965},{"type":19,"tag":20,"props":2007,"children":2008},{},[2009,2010,2015,2017,2023,2025,2030,2032,2037,2039,2044],{"type":28,"value":1200},{"type":19,"tag":33,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":28,"value":46},{"type":28,"value":2016},"控件，然后保存为",{"type":19,"tag":33,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":28,"value":2022},".ui",{"type":28,"value":2024},"文件，并使用Pyuic工具将其转换为",{"type":19,"tag":33,"props":2026,"children":2028},{"className":2027},[],[2029],{"type":28,"value":1213},{"type":28,"value":2031},"文件，在",{"type":19,"tag":33,"props":2033,"children":2035},{"className":2034},[],[2036],{"type":28,"value":1213},{"type":28,"value":2038},"文件中，通过创建",{"type":19,"tag":33,"props":2040,"children":2042},{"className":2041},[],[2043],{"type":28,"value":1684},{"type":28,"value":2045},"对象为树控件设置树节点。代码如下：",{"type":19,"tag":695,"props":2047,"children":2049},{"className":697,"code":2048,"language":699,"meta":7,"style":7},"from PyQt5 import QtCore, QtGui, QtWidgets  \nfrom PyQt5.QtWidgets import QTreeWidgetItem  \n  \nclass Ui_MainWindow(object):  \n  \n    def setupUi(self, MainWindow):  \n        MainWindow.setObjectName(\"MainWindow\")  \n        MainWindow.resize(240, 150)  \n        self.centralwidget = QtWidgets.QWidget(MainWindow)  \n        self.centralwidget.setObjectName(\"centralwidget\")  \n        self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)  \n        self.treeWidget.setGeometry(QtCore.QRect(0, 0, 240, 150))  \n        self.treeWidget.setObjectName(\"treeWidget\")  \n        self.treeWidget.setColumnCount(2)  # 设置树结构中的列数  \n        self.treeWidget.setHeaderLabels(['姓名', '职务'])  # 设置列标题名  \n        root = QTreeWidgetItem(self.treeWidget)  # 创建节点  \n        root.setText(0, '组织结构')  # 设置顶级节点文本  \n        # 定义字典，存储树结构中显示的数据  \n        dict = {'任正非': '华为董事长', '马云': '阿里巴巴创始人', '马化腾': '腾讯CEO', '李彦宏': '百度CEO',  \n                '董明珠': '格力董事长'}  \n        for key, value in dict.items():  # 遍历字典  \n            child = QTreeWidgetItem(root)  # 创建子节点  \n            child.setText(0, key)  # 设置第一列的值  \n            child.setText(1, value)  # 设置第二列的值  \n        self.treeWidget.addTopLevelItem(root)  # 将创建的树节点添加到树控件中  \n        self.treeWidget.expandAll()  # 展开所有树节点  \n        MainWindow.setCentralWidget(self.centralwidget)  \n        self.retranslateUi(MainWindow)  \n        QtCore.QMetaObject.connectSlotsByName(MainWindow)  \n  \n    def retranslateUi(self, MainWindow):  \n        _translate = QtCore.QCoreApplication.translate  \n        MainWindow.setWindowTitle(_translate(\"MainWindow\", \"MainWindow\"))  \n  \nimport sys  \n# 程序入口，程序从此处启动PyQt设计的窗体  \nif __name__ == '__main__':  \n    app = QtWidgets.QApplication(sys.argv)  \n    MainWindow = QtWidgets.QMainWindow()  # 创建窗体对象  \n    ui = Ui_MainWindow()    # 创建PyQt设计的窗体对象  \n    ui.setupUi(MainWindow)  # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n    MainWindow.show()       # 显示窗体  \n    sys.exit(app.exec_())   # 程序关闭时退出进程\n",[2050],{"type":19,"tag":33,"props":2051,"children":2052},{"__ignoreMap":7},[2053,2060,2068,2075,2082,2089,2096,2103,2111,2118,2125,2133,2141,2149,2157,2165,2173,2181,2189,2197,2205,2213,2221,2229,2237,2245,2253,2260,2267,2274,2281,2288,2295,2302,2309,2316,2323,2330,2338,2346,2354,2362,2370],{"type":19,"tag":705,"props":2054,"children":2055},{"class":707,"line":708},[2056],{"type":19,"tag":705,"props":2057,"children":2058},{},[2059],{"type":28,"value":714},{"type":19,"tag":705,"props":2061,"children":2062},{"class":707,"line":717},[2063],{"type":19,"tag":705,"props":2064,"children":2065},{},[2066],{"type":28,"value":2067},"from PyQt5.QtWidgets import QTreeWidgetItem  \n",{"type":19,"tag":705,"props":2069,"children":2070},{"class":707,"line":726},[2071],{"type":19,"tag":705,"props":2072,"children":2073},{},[2074],{"type":28,"value":723},{"type":19,"tag":705,"props":2076,"children":2077},{"class":707,"line":735},[2078],{"type":19,"tag":705,"props":2079,"children":2080},{},[2081],{"type":28,"value":732},{"type":19,"tag":705,"props":2083,"children":2084},{"class":707,"line":743},[2085],{"type":19,"tag":705,"props":2086,"children":2087},{},[2088],{"type":28,"value":723},{"type":19,"tag":705,"props":2090,"children":2091},{"class":707,"line":752},[2092],{"type":19,"tag":705,"props":2093,"children":2094},{},[2095],{"type":28,"value":749},{"type":19,"tag":705,"props":2097,"children":2098},{"class":707,"line":761},[2099],{"type":19,"tag":705,"props":2100,"children":2101},{},[2102],{"type":28,"value":758},{"type":19,"tag":705,"props":2104,"children":2105},{"class":707,"line":770},[2106],{"type":19,"tag":705,"props":2107,"children":2108},{},[2109],{"type":28,"value":2110},"        MainWindow.resize(240, 150)  \n",{"type":19,"tag":705,"props":2112,"children":2113},{"class":707,"line":779},[2114],{"type":19,"tag":705,"props":2115,"children":2116},{},[2117],{"type":28,"value":776},{"type":19,"tag":705,"props":2119,"children":2120},{"class":707,"line":788},[2121],{"type":19,"tag":705,"props":2122,"children":2123},{},[2124],{"type":28,"value":785},{"type":19,"tag":705,"props":2126,"children":2127},{"class":707,"line":797},[2128],{"type":19,"tag":705,"props":2129,"children":2130},{},[2131],{"type":28,"value":2132},"        self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)  \n",{"type":19,"tag":705,"props":2134,"children":2135},{"class":707,"line":806},[2136],{"type":19,"tag":705,"props":2137,"children":2138},{},[2139],{"type":28,"value":2140},"        self.treeWidget.setGeometry(QtCore.QRect(0, 0, 240, 150))  \n",{"type":19,"tag":705,"props":2142,"children":2143},{"class":707,"line":815},[2144],{"type":19,"tag":705,"props":2145,"children":2146},{},[2147],{"type":28,"value":2148},"        self.treeWidget.setObjectName(\"treeWidget\")  \n",{"type":19,"tag":705,"props":2150,"children":2151},{"class":707,"line":824},[2152],{"type":19,"tag":705,"props":2153,"children":2154},{},[2155],{"type":28,"value":2156},"        self.treeWidget.setColumnCount(2)  # 设置树结构中的列数  \n",{"type":19,"tag":705,"props":2158,"children":2159},{"class":707,"line":833},[2160],{"type":19,"tag":705,"props":2161,"children":2162},{},[2163],{"type":28,"value":2164},"        self.treeWidget.setHeaderLabels(['姓名', '职务'])  # 设置列标题名  \n",{"type":19,"tag":705,"props":2166,"children":2167},{"class":707,"line":842},[2168],{"type":19,"tag":705,"props":2169,"children":2170},{},[2171],{"type":28,"value":2172},"        root = QTreeWidgetItem(self.treeWidget)  # 创建节点  \n",{"type":19,"tag":705,"props":2174,"children":2175},{"class":707,"line":851},[2176],{"type":19,"tag":705,"props":2177,"children":2178},{},[2179],{"type":28,"value":2180},"        root.setText(0, '组织结构')  # 设置顶级节点文本  \n",{"type":19,"tag":705,"props":2182,"children":2183},{"class":707,"line":860},[2184],{"type":19,"tag":705,"props":2185,"children":2186},{},[2187],{"type":28,"value":2188},"        # 定义字典，存储树结构中显示的数据  \n",{"type":19,"tag":705,"props":2190,"children":2191},{"class":707,"line":869},[2192],{"type":19,"tag":705,"props":2193,"children":2194},{},[2195],{"type":28,"value":2196},"        dict = {'任正非': '华为董事长', '马云': '阿里巴巴创始人', '马化腾': '腾讯CEO', '李彦宏': '百度CEO',  \n",{"type":19,"tag":705,"props":2198,"children":2199},{"class":707,"line":878},[2200],{"type":19,"tag":705,"props":2201,"children":2202},{},[2203],{"type":28,"value":2204},"                '董明珠': '格力董事长'}  \n",{"type":19,"tag":705,"props":2206,"children":2207},{"class":707,"line":887},[2208],{"type":19,"tag":705,"props":2209,"children":2210},{},[2211],{"type":28,"value":2212},"        for key, value in dict.items():  # 遍历字典  \n",{"type":19,"tag":705,"props":2214,"children":2215},{"class":707,"line":896},[2216],{"type":19,"tag":705,"props":2217,"children":2218},{},[2219],{"type":28,"value":2220},"            child = QTreeWidgetItem(root)  # 创建子节点  \n",{"type":19,"tag":705,"props":2222,"children":2223},{"class":707,"line":905},[2224],{"type":19,"tag":705,"props":2225,"children":2226},{},[2227],{"type":28,"value":2228},"            child.setText(0, key)  # 设置第一列的值  \n",{"type":19,"tag":705,"props":2230,"children":2231},{"class":707,"line":914},[2232],{"type":19,"tag":705,"props":2233,"children":2234},{},[2235],{"type":28,"value":2236},"            child.setText(1, value)  # 设置第二列的值  \n",{"type":19,"tag":705,"props":2238,"children":2239},{"class":707,"line":923},[2240],{"type":19,"tag":705,"props":2241,"children":2242},{},[2243],{"type":28,"value":2244},"        self.treeWidget.addTopLevelItem(root)  # 将创建的树节点添加到树控件中  \n",{"type":19,"tag":705,"props":2246,"children":2247},{"class":707,"line":932},[2248],{"type":19,"tag":705,"props":2249,"children":2250},{},[2251],{"type":28,"value":2252},"        self.treeWidget.expandAll()  # 展开所有树节点  \n",{"type":19,"tag":705,"props":2254,"children":2255},{"class":707,"line":941},[2256],{"type":19,"tag":705,"props":2257,"children":2258},{},[2259],{"type":28,"value":974},{"type":19,"tag":705,"props":2261,"children":2262},{"class":707,"line":950},[2263],{"type":19,"tag":705,"props":2264,"children":2265},{},[2266],{"type":28,"value":983},{"type":19,"tag":705,"props":2268,"children":2269},{"class":707,"line":959},[2270],{"type":19,"tag":705,"props":2271,"children":2272},{},[2273],{"type":28,"value":992},{"type":19,"tag":705,"props":2275,"children":2276},{"class":707,"line":968},[2277],{"type":19,"tag":705,"props":2278,"children":2279},{},[2280],{"type":28,"value":723},{"type":19,"tag":705,"props":2282,"children":2283},{"class":707,"line":977},[2284],{"type":19,"tag":705,"props":2285,"children":2286},{},[2287],{"type":28,"value":1027},{"type":19,"tag":705,"props":2289,"children":2290},{"class":707,"line":986},[2291],{"type":19,"tag":705,"props":2292,"children":2293},{},[2294],{"type":28,"value":1036},{"type":19,"tag":705,"props":2296,"children":2297},{"class":707,"line":995},[2298],{"type":19,"tag":705,"props":2299,"children":2300},{},[2301],{"type":28,"value":1045},{"type":19,"tag":705,"props":2303,"children":2304},{"class":707,"line":1004},[2305],{"type":19,"tag":705,"props":2306,"children":2307},{},[2308],{"type":28,"value":723},{"type":19,"tag":705,"props":2310,"children":2311},{"class":707,"line":1013},[2312],{"type":19,"tag":705,"props":2313,"children":2314},{},[2315],{"type":28,"value":1062},{"type":19,"tag":705,"props":2317,"children":2318},{"class":707,"line":1021},[2319],{"type":19,"tag":705,"props":2320,"children":2321},{},[2322],{"type":28,"value":1071},{"type":19,"tag":705,"props":2324,"children":2325},{"class":707,"line":1030},[2326],{"type":19,"tag":705,"props":2327,"children":2328},{},[2329],{"type":28,"value":1080},{"type":19,"tag":705,"props":2331,"children":2332},{"class":707,"line":1039},[2333],{"type":19,"tag":705,"props":2334,"children":2335},{},[2336],{"type":28,"value":2337},"    app = QtWidgets.QApplication(sys.argv)  \n",{"type":19,"tag":705,"props":2339,"children":2340},{"class":707,"line":1048},[2341],{"type":19,"tag":705,"props":2342,"children":2343},{},[2344],{"type":28,"value":2345},"    MainWindow = QtWidgets.QMainWindow()  # 创建窗体对象  \n",{"type":19,"tag":705,"props":2347,"children":2348},{"class":707,"line":1056},[2349],{"type":19,"tag":705,"props":2350,"children":2351},{},[2352],{"type":28,"value":2353},"    ui = Ui_MainWindow()    # 创建PyQt设计的窗体对象  \n",{"type":19,"tag":705,"props":2355,"children":2356},{"class":707,"line":1065},[2357],{"type":19,"tag":705,"props":2358,"children":2359},{},[2360],{"type":28,"value":2361},"    ui.setupUi(MainWindow)  # 调用PyQt窗体的方法对窗体对象进行初始化设置  \n",{"type":19,"tag":705,"props":2363,"children":2364},{"class":707,"line":1074},[2365],{"type":19,"tag":705,"props":2366,"children":2367},{},[2368],{"type":28,"value":2369},"    MainWindow.show()       # 显示窗体  \n",{"type":19,"tag":705,"props":2371,"children":2372},{"class":707,"line":1083},[2373],{"type":19,"tag":705,"props":2374,"children":2375},{},[2376],{"type":28,"value":2377},"    sys.exit(app.exec_())   # 程序关闭时退出进程\n",{"type":19,"tag":20,"props":2379,"children":2380},{},[2381],{"type":28,"value":1139},{"type":19,"tag":20,"props":2383,"children":2384},{},[2385],{"type":19,"tag":1144,"props":2386,"children":2389},{"alt":2387,"src":2388},"Pasted image 20250903163236","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903163236.png",[],{"type":19,"tag":518,"props":2391,"children":2393},{"id":2392},"_2为节点设置图标",[2394],{"type":28,"value":2395},"2）为节点设置图标",{"type":19,"tag":20,"props":2397,"children":2398},{},[2399,2401,2406,2408,2414],{"type":28,"value":2400},"为节点设置图标主要用到了",{"type":19,"tag":33,"props":2402,"children":2404},{"className":2403},[],[2405],{"type":28,"value":1684},{"type":28,"value":2407},"类的",{"type":19,"tag":33,"props":2409,"children":2411},{"className":2410},[],[2412],{"type":28,"value":2413},"setIcon()方法",{"type":28,"value":2415},"。例如，为上述实例中的第一列的每个企业家姓名前面设置其对应公司的图标，代码如下：",{"type":19,"tag":695,"props":2417,"children":2419},{"className":697,"code":2418,"language":699,"meta":7,"style":7},"# 为节点设置图标  \nif key == '任正非':  \n    child.setIcon(0, QtGui.QIcon('图标\u002F01.png'))  \nelif key == '马云':  \n    child.setIcon(0, QtGui.QIcon('图标\u002F02.png'))  \nelif key == '马化腾':  \n    child.setIcon(0, QtGui.QIcon('图标\u002F03.png'))  \nelif key == '李彦宏':  \n    child.setIcon(0, QtGui.QIcon('图标\u002F04.png'))  \nelif key == '董明珠':  \n    child.setIcon(0, QtGui.QIcon('图标\u002F05.png'))\n",[2420],{"type":19,"tag":33,"props":2421,"children":2422},{"__ignoreMap":7},[2423,2431,2439,2447,2455,2463,2471,2479,2487,2495,2503],{"type":19,"tag":705,"props":2424,"children":2425},{"class":707,"line":708},[2426],{"type":19,"tag":705,"props":2427,"children":2428},{},[2429],{"type":28,"value":2430},"# 为节点设置图标  \n",{"type":19,"tag":705,"props":2432,"children":2433},{"class":707,"line":717},[2434],{"type":19,"tag":705,"props":2435,"children":2436},{},[2437],{"type":28,"value":2438},"if key == '任正非':  \n",{"type":19,"tag":705,"props":2440,"children":2441},{"class":707,"line":726},[2442],{"type":19,"tag":705,"props":2443,"children":2444},{},[2445],{"type":28,"value":2446},"    child.setIcon(0, QtGui.QIcon('图标\u002F01.png'))  \n",{"type":19,"tag":705,"props":2448,"children":2449},{"class":707,"line":735},[2450],{"type":19,"tag":705,"props":2451,"children":2452},{},[2453],{"type":28,"value":2454},"elif key == '马云':  \n",{"type":19,"tag":705,"props":2456,"children":2457},{"class":707,"line":743},[2458],{"type":19,"tag":705,"props":2459,"children":2460},{},[2461],{"type":28,"value":2462},"    child.setIcon(0, QtGui.QIcon('图标\u002F02.png'))  \n",{"type":19,"tag":705,"props":2464,"children":2465},{"class":707,"line":752},[2466],{"type":19,"tag":705,"props":2467,"children":2468},{},[2469],{"type":28,"value":2470},"elif key == '马化腾':  \n",{"type":19,"tag":705,"props":2472,"children":2473},{"class":707,"line":761},[2474],{"type":19,"tag":705,"props":2475,"children":2476},{},[2477],{"type":28,"value":2478},"    child.setIcon(0, QtGui.QIcon('图标\u002F03.png'))  \n",{"type":19,"tag":705,"props":2480,"children":2481},{"class":707,"line":770},[2482],{"type":19,"tag":705,"props":2483,"children":2484},{},[2485],{"type":28,"value":2486},"elif key == '李彦宏':  \n",{"type":19,"tag":705,"props":2488,"children":2489},{"class":707,"line":779},[2490],{"type":19,"tag":705,"props":2491,"children":2492},{},[2493],{"type":28,"value":2494},"    child.setIcon(0, QtGui.QIcon('图标\u002F04.png'))  \n",{"type":19,"tag":705,"props":2496,"children":2497},{"class":707,"line":788},[2498],{"type":19,"tag":705,"props":2499,"children":2500},{},[2501],{"type":28,"value":2502},"elif key == '董明珠':  \n",{"type":19,"tag":705,"props":2504,"children":2505},{"class":707,"line":797},[2506],{"type":19,"tag":705,"props":2507,"children":2508},{},[2509],{"type":28,"value":2510},"    child.setIcon(0, QtGui.QIcon('图标\u002F05.png'))\n",{"type":19,"tag":2512,"props":2513,"children":2514},"blockquote",{},[2515],{"type":19,"tag":20,"props":2516,"children":2517},{},[2518,2523,2525,2530,2532,2538],{"type":19,"tag":24,"props":2519,"children":2520},{},[2521],{"type":28,"value":2522},"Info:",{"type":28,"value":2524}," 说明\n上面代码中用到了5张图片，需要在",{"type":19,"tag":33,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":28,"value":1213},{"type":28,"value":2531},"文件的同级目录中创建",{"type":19,"tag":33,"props":2533,"children":2535},{"className":2534},[],[2536],{"type":28,"value":2537},"图标",{"type":28,"value":2539},"文件夹，并将用到的5张图片提前放到该文件夹中。",{"type":19,"tag":20,"props":2541,"children":2542},{},[2543],{"type":28,"value":1139},{"type":19,"tag":20,"props":2545,"children":2546},{},[2547],{"type":19,"tag":1144,"props":2548,"children":2551},{"alt":2549,"src":2550},"Pasted image 20250903180405","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903180405.png",[],{"type":19,"tag":518,"props":2553,"children":2555},{"id":2554},"_3为节点设置复选框",[2556],{"type":28,"value":2557},"3）为节点设置复选框",{"type":19,"tag":20,"props":2559,"children":2560},{},[2561,2563,2568,2570,2576],{"type":28,"value":2562},"为节点设置复选框主要用到了",{"type":19,"tag":33,"props":2564,"children":2566},{"className":2565},[],[2567],{"type":28,"value":1684},{"type":28,"value":2569},"类中的",{"type":19,"tag":33,"props":2571,"children":2573},{"className":2572},[],[2574],{"type":28,"value":2575},"setCheckState()方法",{"type":28,"value":2577},"，该方法中可以设置选中（Qt.Checked），也可以设置未选中（Qt.Unchecked）。例如，为上述实例中的第一列设置复选框，并全部设置为选中状态，代码如下：",{"type":19,"tag":695,"props":2579,"children":2581},{"className":697,"code":2580,"language":699,"meta":7,"style":7},"# 为节点设置复选框，并且选中  \nchild.setCheckState(0, QtCore.Qt.Checked)\n",[2582],{"type":19,"tag":33,"props":2583,"children":2584},{"__ignoreMap":7},[2585,2593],{"type":19,"tag":705,"props":2586,"children":2587},{"class":707,"line":708},[2588],{"type":19,"tag":705,"props":2589,"children":2590},{},[2591],{"type":28,"value":2592},"# 为节点设置复选框，并且选中  \n",{"type":19,"tag":705,"props":2594,"children":2595},{"class":707,"line":717},[2596],{"type":19,"tag":705,"props":2597,"children":2598},{},[2599],{"type":28,"value":2600},"child.setCheckState(0, QtCore.Qt.Checked)\n",{"type":19,"tag":20,"props":2602,"children":2603},{},[2604],{"type":28,"value":1139},{"type":19,"tag":20,"props":2606,"children":2607},{},[2608],{"type":19,"tag":1144,"props":2609,"children":2612},{"alt":2610,"src":2611},"Pasted image 20250903180724","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903180724.png",[],{"type":19,"tag":518,"props":2614,"children":2616},{"id":2615},"_4设置隔行变色显示树节点",[2617],{"type":28,"value":2618},"4）设置隔行变色显示树节点",{"type":19,"tag":20,"props":2620,"children":2621},{},[2622,2624,2629,2631,2637,2639,2645,2647,2652,2654,2660,2661,2666],{"type":28,"value":2623},"隔行变色显示树节点需要用到",{"type":19,"tag":33,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":28,"value":46},{"type":28,"value":2630},"控件的",{"type":19,"tag":33,"props":2632,"children":2634},{"className":2633},[],[2635],{"type":28,"value":2636},"setAlternatingRowColors()方法",{"type":28,"value":2638},"，设置为",{"type":19,"tag":33,"props":2640,"children":2642},{"className":2641},[],[2643],{"type":28,"value":2644},"True",{"type":28,"value":2646},"，",{"type":19,"tag":24,"props":2648,"children":2649},{},[2650],{"type":28,"value":2651},"表示隔行换色",{"type":28,"value":2653},"；设置为",{"type":19,"tag":33,"props":2655,"children":2657},{"className":2656},[],[2658],{"type":28,"value":2659},"False",{"type":28,"value":2646},{"type":19,"tag":24,"props":2662,"children":2663},{},[2664],{"type":28,"value":2665},"表示统一颜色",{"type":28,"value":2667},"。例如，将上述实例中的树节点设置为隔行变色形式显示，代码如下：",{"type":19,"tag":695,"props":2669,"children":2671},{"className":697,"code":2670,"language":699,"meta":7,"style":7},"self.treeWidget.setAlternatingRowColors(True)  # 设置隔行变色\n",[2672],{"type":19,"tag":33,"props":2673,"children":2674},{"__ignoreMap":7},[2675],{"type":19,"tag":705,"props":2676,"children":2677},{"class":707,"line":708},[2678],{"type":19,"tag":705,"props":2679,"children":2680},{},[2681],{"type":28,"value":2670},{"type":19,"tag":20,"props":2683,"children":2684},{},[2685],{"type":28,"value":2686},"运行程序，效果如图所示，从图可以看出，树控件的奇数行为浅灰色背景，而偶数行为白色背景。",{"type":19,"tag":20,"props":2688,"children":2689},{},[2690],{"type":19,"tag":1144,"props":2691,"children":2694},{"alt":2692,"src":2693},"Pasted image 20250903181008","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903181008.png",[],{"type":19,"tag":518,"props":2696,"children":2698},{"id":2697},"_5获取选中节点的文本",[2699],{"type":28,"value":2700},"5）获取选中节点的文本",{"type":19,"tag":20,"props":2702,"children":2703},{},[2704,2706,2712,2714,2720],{"type":28,"value":2705},"在获取选中节点的文本时，首先需要使用",{"type":19,"tag":33,"props":2707,"children":2709},{"className":2708},[],[2710],{"type":28,"value":2711},"currentItem()方法",{"type":28,"value":2713},"获取当前的选中项，然后通过",{"type":19,"tag":33,"props":2715,"children":2717},{"className":2716},[],[2718],{"type":28,"value":2719},"text()方法",{"type":28,"value":2721},"获取指定列的文本。例如，在单击上述实例中的树节点时，定义一个槽函数，用来显示单击的树节点文本，代码如下：",{"type":19,"tag":695,"props":2723,"children":2725},{"className":697,"code":2724,"language":699,"meta":7,"style":7},"def gettreetext(self, index):  \n    item = self.treeWidget.currentItem()  # 获取当前选中项  \n    # 弹出提示框，显示选中项的文本  \n    QtWidgets.QMessageBox.information(MainWindow, '提示', '您选择的是：%s -- %s' % (item.text(0), item.text(1)),QtWidgets.QMessageBox.Ok)\n",[2726],{"type":19,"tag":33,"props":2727,"children":2728},{"__ignoreMap":7},[2729,2737,2745,2753],{"type":19,"tag":705,"props":2730,"children":2731},{"class":707,"line":708},[2732],{"type":19,"tag":705,"props":2733,"children":2734},{},[2735],{"type":28,"value":2736},"def gettreetext(self, index):  \n",{"type":19,"tag":705,"props":2738,"children":2739},{"class":707,"line":717},[2740],{"type":19,"tag":705,"props":2741,"children":2742},{},[2743],{"type":28,"value":2744},"    item = self.treeWidget.currentItem()  # 获取当前选中项  \n",{"type":19,"tag":705,"props":2746,"children":2747},{"class":707,"line":726},[2748],{"type":19,"tag":705,"props":2749,"children":2750},{},[2751],{"type":28,"value":2752},"    # 弹出提示框，显示选中项的文本  \n",{"type":19,"tag":705,"props":2754,"children":2755},{"class":707,"line":735},[2756],{"type":19,"tag":705,"props":2757,"children":2758},{},[2759],{"type":28,"value":2760},"    QtWidgets.QMessageBox.information(MainWindow, '提示', '您选择的是：%s -- %s' % (item.text(0), item.text(1)),QtWidgets.QMessageBox.Ok)\n",{"type":19,"tag":20,"props":2762,"children":2763},{},[2764,2766,2772],{"type":28,"value":2765},"为树控件的",{"type":19,"tag":33,"props":2767,"children":2769},{"className":2768},[],[2770],{"type":28,"value":2771},"clicked信号",{"type":28,"value":2773},"绑定自定义的槽函数，以便在单击树控件时发射，代码如下：",{"type":19,"tag":695,"props":2775,"children":2777},{"className":697,"code":2776,"language":699,"meta":7,"style":7},"# 为树控件绑定单击信号  \nself.treeWidget.clicked.connect(self.gettreetext)\n",[2778],{"type":19,"tag":33,"props":2779,"children":2780},{"__ignoreMap":7},[2781,2789],{"type":19,"tag":705,"props":2782,"children":2783},{"class":707,"line":708},[2784],{"type":19,"tag":705,"props":2785,"children":2786},{},[2787],{"type":28,"value":2788},"# 为树控件绑定单击信号  \n",{"type":19,"tag":705,"props":2790,"children":2791},{"class":707,"line":717},[2792],{"type":19,"tag":705,"props":2793,"children":2794},{},[2795],{"type":28,"value":2796},"self.treeWidget.clicked.connect(self.gettreetext)\n",{"type":19,"tag":20,"props":2798,"children":2799},{},[2800],{"type":28,"value":2801},"运行程序，单击树中的节点，即可弹出提示框，显示单击的树节点的文本，如图所示。",{"type":19,"tag":20,"props":2803,"children":2804},{},[2805],{"type":19,"tag":1144,"props":2806,"children":2809},{"alt":2807,"src":2808},"Pasted image 20250903181327","\u002Fimages\u002Fblog\u002Fpyqt5\u002FPasted%20image%2020250903181327.png",[],{"type":19,"tag":2811,"props":2812,"children":2813},"style",{},[2814],{"type":28,"value":2815},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":717,"depth":717,"links":2817},[2818,2820],{"id":52,"depth":717,"text":2819},"1  TreeView：树视图",{"id":1647,"depth":717,"text":2821},"2  TreeWidget：树控件","markdown","content:blog:2025-09-02-pyqt5-树控件.md","content","blog\u002F2025-09-02-pyqt5-树控件.md","blog\u002F2025-09-02-pyqt5-树控件","md",1780801017954]