1. 程式人生 > >PyQt treewiget新增複選框,並獲取是否選中

PyQt treewiget新增複選框,並獲取是否選中

# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

  
class TreeWidget(QWidget):
    def __init__(self):
        super(TreeWidget, self).__init__()
        self.setWindowTitle('TreeWidget')
        
        self.tree = QTreeWidget()  # 例項化一個TreeWidget物件
        self.tree.setColumnCount(2)  # 設定部件的列數為2
        self.tree.setDropIndicatorShown(True)

        self.tree.setSelectionMode(QAbstractItemView.ExtendedSelection)#設定item可以多選
        self.tree.setHeaderLabels(['Key', 'Value'])  # 設定頭部資訊對應列的識別符號

        # 設定root為self.tree的子樹,故root是根節點
        root = QTreeWidgetItem(self.tree)
        root.setText(0, 'root')  # 設定根節點的名稱

        # 為root節點設定子結點
        child1 = QTreeWidgetItem(root)
        child1.setText(0, 'child1')
        child1.setText(1, 'name1')
        child1.setCheckState(0, Qt.Unchecked);
        
        child2 = QTreeWidgetItem(root)
        child2.setText(0, 'child2')
        child2.setText(1, 'name2')
        child2.setCheckState(0, Qt.Unchecked);
        
        child3 = QTreeWidgetItem(root)
        child3.setText(0, 'child3')
        child3.setCheckState(0, Qt.Unchecked);
        
        child4 = QTreeWidgetItem(child3)
        child4.setText(0, 'child4')
        child4.setText(1, 'name4')
        child4.setCheckState(0, Qt.Unchecked);

        button=QPushButton("test")
        lay=QVBoxLayout()
        lay.addWidget(button)
        lay.addWidget(self.tree)

        button.clicked.connect(self.getText)
        
        self.tree.itemChanged.connect(self.handleChanged)
        
        self.tree.addTopLevelItem(root)
        self.setLayout(lay)  # 將tree部件設定為該視窗的核心框架
        
    def handleChanged(self, item, column):
    #當check狀態改變時得到他的狀態。
        if item.checkState(column) == Qt.Checked:
            print "checked", item, item.text(column)
        if item.checkState(column) == Qt.Unchecked:
            print "unchecked", item, item.text(column)
            

    def getText(self):
        #print self.tree
        
        #獲取選擇的某項
        #print self.tree.currentItem().text(1) ;
        
        #當item多選時獲取選擇的某幾項,text(0),代表第0列,text(1),代表第1列
        Item_list= self.tree.selectedItems ()
        for ii in Item_list:
            print ii.text(1)

app = QApplication(sys.argv)
app.aboutToQuit.connect(app.deleteLater)
tp = TreeWidget()
tp.show()
app.exec_()

在這裡插入圖片描述

在這裡插入圖片描述