?
?文章來源:http://www.zghlxwxcb.cn/news/detail-512159.html
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QTreeWidget, QTreeWidgetItem, QLabel, QHBoxLayout
class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.resize(500, 300)
self.label = QLabel('No Click')
self.tree = QTreeWidget(self) # 實例化樹形控件
self.tree.setColumnCount(1) #將該樹狀控件的列數(shù)設為2(默認為1列)
self.tree.setHeaderLabels(['樹形控件', '列'])
#設置每列的標題,如果只有一列的話,則應該通過setHeaderLabel(str)方法設置
self.tree.itemClicked.connect(self.change_func)#單擊控件時發(fā)出信號
#這個信號會自動傳遞兩個參數(shù)
#參數(shù)1就是被單擊的項目對象。<PyQt5.QtWidgets.QTreeWidgetItem object at 0x0000008269BE7EE8>
#參數(shù)2就是單擊的列序號
self.preview = QTreeWidgetItem(self.tree) # 實例化一個項目。參數(shù):指定父類
self.preview.setText(0, '頂層項目') #給項目設置文本。參數(shù)1:列序號
self.preview.setText(1, '頂層項目-1列')
self.preview1 = QTreeWidgetItem()
self.preview1.setText(0, '頂層項目1')
self.preview1.setText(1, '頂層項目1-1列')
self.tree.addTopLevelItem(self.preview1) #把self.preview1項目設置為頂層項目
self.qt5112 = QTreeWidgetItem()
self.qt5112.setText(0, 'Qt 5112 snapshot')
self.qt5112.setCheckState(0, Qt.Unchecked) #設置復選框的位置和狀態(tài)
#參數(shù)1 復選框的位置 列序號
#Qt.Unchecked 沒選中
#Qt.Checked 選中
#Qt.PartiallyChecked 部分選中
self.preview.addChild(self.qt5112)#給self.preview添加子項目self.qt5112
#給self.qt5112添加父類
choice_list = ['macOS', 'Android x86', 'Android ARMv7', 'Sources', 'iOS']
self.item_list = []
for i, c in enumerate(choice_list):
item = QTreeWidgetItem(self.qt5112)
item.setText(0, c)
item.setCheckState(0, Qt.Unchecked)
self.item_list.append(item)
self.test_item = QTreeWidgetItem(self.qt5112)
self.test_item.setText(0, 'test1')
self.test_item.setText(1, 'test2')
self.tree.expandAll()
#讓所有的項都是以打開狀態(tài)顯示的。注意必須要在所有項都已經(jīng)實例化好之后再調(diào)用該方法,如果一開始就調(diào)用則會沒有效果
self.h_layout = QHBoxLayout()
self.h_layout.addWidget(self.tree)
self.h_layout.addWidget(self.label)
self.setLayout(self.h_layout)
def change_func(self, item, column):
self.label.setText(item.text(column))
#item.text(column) 返回項目指定列的文本
if item == self.qt5112:
if self.qt5112.checkState(0) == Qt.Checked:#判斷self.qt5112復選框的狀態(tài)。參數(shù)復選框位置:列序號
#self.qt5112.checkState(0) 返回復選框的狀態(tài)
[x.setCheckState(0, Qt.Checked) for x in self.item_list]
else:
[x.setCheckState(0, Qt.Unchecked) for x in self.item_list]
else:
check_count = 0
for x in self.item_list:
if x.checkState(0) == Qt.Checked:
check_count += 1
if check_count == 5:
self.qt5112.setCheckState(0, Qt.Checked)
elif 0 < check_count < 5:
self.qt5112.setCheckState(0, Qt.PartiallyChecked) #設置復選框為半選中狀態(tài)
else:
self.qt5112.setCheckState(0, Qt.Unchecked)
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
enjoy文章來源地址http://www.zghlxwxcb.cn/news/detail-512159.html
到了這里,關(guān)于QTreeWidget實現(xiàn)復選框的全選/部分選擇/半選擇狀態(tài)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!