PyQt5——列表控件、树形控件、表格控件

转载于《快速掌握PyQt5》第十九章 列表控件、树形控件、表格控件

列表控件可以让我们以列表形式呈现内容,是界面更加有序美观

QListWidget列表控件————与QListWidgetItem一起使用,后者作为项被添加入列表控件中,也就是说列表控件中的每一项都是一个QListWidgetItem。

QTreeWidget树形控件————以树状方式呈现内容,并与QTreeWidgetItem搭配使用

QTableWidget表格控件————以表格形式呈现内容,并与QTableWidgetItem一起使用

1、QListWidget列表控件

import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QListWidget, QListWidgetItem, QHBoxLayout
 
 
class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

 
        self.listwidget_1 = QListWidget(self)               
        self.listwidget_2 = QListWidget(self)

        self.listwidget_1.doubleClicked.connect(lambda: self.change_func(self.listwidget_1))
        self.listwidget_2.doubleClicked.connect(lambda: self.change_func(self.listwidget_2))

        # 为listwidget_1添加QListWidgetItem

        for i in range(6):                                  
            text = 'Item {}'.format(i)
            self.item = QListWidgetItem(text)
            self.listwidget_1.addItem(self.item)

        self.item_6 = QListWidgetItem('Item 6', self.listwidget_1) 

        self.listwidget_1.addItem('Item 7')                         
        str_list = ['Item 9', 'Item 10']
        self.listwidget_1.addItems(str_list)
 
        self.item_8 = QListWidgetItem('Item 8')                  
        self.listwidget_1.insertItem(8, self.item_8)

 
        self.h_layout = QHBoxLayout()
        self.h_layout.addWidget(self.listwidget_1)
        self.h_layout.addWidget(self.listwidget_2)
        self.setLayout(self.h_layout)
 
    #槽函数,点击listwidget_1中的某一item,为listwidget_2添加item,点击listwidget_2中的某一item,去除该item
    def change_func(self, listwidget):                             
        if listwidget == self.listwidget_1:
            item = QListWidgetItem(self.listwidget_1.currentItem())
            self.listwidget_2.addItem(item)
            print(self.listwidget_2.count())
        else:
            self.listwidget_2.takeItem(self.listwidget_2.currentRow())
            print(self.listwidget_2.count())
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

输出结果:
在这里插入图片描述
2、QTreeWidget树形控件

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')                         #  QLabel控件用于显示每个QTreeWidgetItem的文本;
 
        self.tree = QTreeWidget(self)                           # 设置行数与列数
        self.tree.setColumnCount(2)
        self.tree.setHeaderLabels(['Install Components', 'Test'])
        self.tree.itemClicked.connect(self.change_func)

        # 实例化一个QTreeWidgetItem,并将其父类设为self.tree,表示self.preview为最外层(最顶层)的项,接着通过setText(int, str)方法来设置文本
        self.preview = QTreeWidgetItem(self.tree)               
        self.preview.setText(0, 'Preview')
 

        # setCheckState(int, CheckState)方法可以让该项以复选框形式呈现出来,addChild(QTreeWidgetItem)方法可以添加子项,这里让self.preview添加一个self.qt5112选项;
        self.qt5112 = QTreeWidgetItem()                         
        self.qt5112.setText(0, 'Qt 5.11.2 snapshot')
        self.qt5112.setCheckState(0, Qt.Unchecked)
        self.preview.addChild(self.qt5112)
 
        choice_list = ['macOS', 'Android x86', 'Android ARMv7', 'Sources', 'iOS']
        self.item_list = []
        for i, c in enumerate(choice_list):                     #  实例化5个子项,将他们添加到self.qt5112中,并以复选框形式显示;
            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()                                   # 调用expandAll()方法可以让QTreeWidget所有的项都是以打开状态显示的。
 
        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))                  
 
        print(item.text(column))
        print(column)
        if item == self.qt5112:                                
            if self.qt5112.checkState(0) == Qt.Checked:
                [x.setCheckState(0, Qt.Checked) for x in self.item_list]
            else:
                [x.setCheckState(0, Qt.Unchecked) for x in self.item_list]
        else:                                                   # 10
            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)
            else:
                self.qt5112.setCheckState(0, Qt.Unchecked)
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

输出结果:
在这里插入图片描述
3、QTableWidget表格控件

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
 
 
class Demo(QTableWidget):                              
    def __init__(self):
        super(Demo, self).__init__()
        self.setRowCount(6)                             # 设置行数与列数
        self.setColumnCount(6)

 
        print(self.rowCount())                          # 打印行数与列数
        print(self.columnCount())
 
        self.setColumnWidth(0, 30)                      # 设置行宽与类高
        self.setRowHeight(0, 30)
 
        self.setHorizontalHeaderLabels(['h1', 'h2', 'h3', 'h4', ' h5', 'h6'])   # 设置每一列的名称
        self.setVerticalHeaderLabels(['t1', 't2', 't3', 't4', 't5', 't6'])  # 设置每一行的名称
 
        # self.setShowGrid(False)                       # 设置是否显示表格上的网格线,True为显示,False不显示
 
        self.item_1 = QTableWidgetItem('Hi')            # 填表,第一行第一列填Hi
        self.setItem(0, 0, self.item_1)
 
        self.item_2 = QTableWidgetItem('Bye')           # 填表,第三行第三列填Hi
        self.item_2.setTextAlignment(Qt.AlignCenter)
        self.setItem(2, 2, self.item_2)
 
        self.setSpan(2, 2, 2, 2)                        # 合并行列
 
        print(self.findItems('Hi', Qt.MatchExactly))    # findItems(str, Qt.MatchFlag)方法用来进行查找,前一个参数为用来匹配的字符串,后一个参数为匹配方式。在代码中我们用了两种匹配方式,第一种为Qt.MatchExactly,表示精确匹配。第二种为Qt.MatchContains,表示包含匹配。
        print(self.findItems('B', Qt.MatchContains))
 
 
if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

输出结果:
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值