• 树形控件QTreeWidget


     1 import sys
     2 from PyQt5.QtCore import Qt
     3 from PyQt5.QtWidgets import QApplication, QWidget, QTreeWidget, QTreeWidgetItem, QLabel, QHBoxLayout
     4 
     5 
     6 class Demo(QWidget):
     7     def __init__(self):
     8         super(Demo, self).__init__()
     9         self.resize(500, 300)
    10         self.label = QLabel('No Click')
    11 
    12         self.tree = QTreeWidget(self)  # 实例化树形控件
    13         self.tree.setColumnCount(1)  #将该树状控件的列数设为2(默认为1列)
    14         self.tree.setHeaderLabels(['树形控件', '列'])
    15         #设置每列的标题,如果只有一列的话,则应该通过setHeaderLabel(str)方法设置
    16 
    17         self.tree.itemClicked.connect(self.change_func)#单击控件时发出信号
    18         #这个信号会自动传递两个参数
    19         #参数1就是被单击的项目对象。<PyQt5.QtWidgets.QTreeWidgetItem object at 0x0000008269BE7EE8>
    20         #参数2就是单击的列序号
    21 
    22         self.preview = QTreeWidgetItem(self.tree)  # 实例化一个项目。参数:指定父类
    23         self.preview.setText(0, '顶层项目')  #给项目设置文本。参数1:列序号
    24         self.preview.setText(1, '顶层项目-1列')
    25 
    26         self.preview1 = QTreeWidgetItem()
    27         self.preview1.setText(0, '顶层项目1')
    28         self.preview1.setText(1, '顶层项目1-1列')
    29         self.tree.addTopLevelItem(self.preview1)  #把self.preview1项目设置为顶层项目
    30 
    31         self.qt5112 = QTreeWidgetItem()
    32         self.qt5112.setText(0, 'Qt 5112 snapshot')
    33         self.qt5112.setCheckState(0, Qt.Unchecked)  #设置复选框的位置和状态
    34         #参数1 复选框的位置 列序号
    35         #Qt.Unchecked   没选中
    36         #Qt.Checked    选中
    37         #Qt.PartiallyChecked   部分选中
    38 
    39         self.preview.addChild(self.qt5112)#给self.preview添加子项目self.qt5112
    40         #给self.qt5112添加父类
    41 
    42         choice_list = ['macOS', 'Android x86', 'Android ARMv7', 'Sources', 'iOS']
    43         self.item_list = []
    44         for i, c in enumerate(choice_list):
    45             item = QTreeWidgetItem(self.qt5112)
    46             item.setText(0, c)
    47             item.setCheckState(0, Qt.Unchecked)
    48             self.item_list.append(item)
    49 
    50         self.test_item = QTreeWidgetItem(self.qt5112)
    51         self.test_item.setText(0, 'test1')
    52         self.test_item.setText(1, 'test2')
    53 
    54         self.tree.expandAll()
    55         #让所有的项都是以打开状态显示的。注意必须要在所有项都已经实例化好之后再调用该方法,如果一开始就调用则会没有效果
    56 
    57         self.h_layout = QHBoxLayout()
    58         self.h_layout.addWidget(self.tree)
    59         self.h_layout.addWidget(self.label)
    60         self.setLayout(self.h_layout)
    61 
    62     def change_func(self, item, column):
    63         self.label.setText(item.text(column))
    64         #item.text(column)  返回项目指定列的文本
    65 
    66         if item == self.qt5112:
    67             if self.qt5112.checkState(0) == Qt.Checked:#判断self.qt5112复选框的状态。参数复选框位置:列序号
    68                 #self.qt5112.checkState(0)   返回复选框的状态
    69                 [x.setCheckState(0, Qt.Checked) for x in self.item_list]
    70             else:
    71                 [x.setCheckState(0, Qt.Unchecked) for x in self.item_list]
    72         else:
    73             check_count = 0
    74             for x in self.item_list:
    75                 if x.checkState(0) == Qt.Checked:
    76                     check_count += 1
    77 
    78             if check_count == 5:
    79                 self.qt5112.setCheckState(0, Qt.Checked)
    80             elif 0 < check_count < 5:
    81                 self.qt5112.setCheckState(0, Qt.PartiallyChecked)  #设置复选框为半选中状态
    82             else:
    83                 self.qt5112.setCheckState(0, Qt.Unchecked)
    84 
    85 
    86 if __name__ == '__main__':
    87     app = QApplication(sys.argv)
    88     demo = Demo()
    89     demo.show()
    90     sys.exit(app.exec_())
  • 相关阅读:
    2017python学习的第四天,生成器,装饰器迭代器
    2017python第三天作业
    2017python学习的第三天函数
    2017python学习的第三天文件的操作
    2017python第二天作业
    python第二天学了列表,字典和嵌套
    [Translation] Introduction to ASP.NET Core
    Create a private nuget server
    Cunningham's Law
    [转]Migrating HTTP handlers and modules to ASP.NET Core middleware
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10383021.html
Copyright © 2020-2023  润新知