PyQt5 列表部件QListWidget

  • Post category:Python

下面我来详细讲解Python的“PyQt5 列表部件QListWidget”的完整使用攻略。

一、列表部件QListWidget

列表部件QListWidget是PyQt5提供的一种实现基本列表显示和选择的部件。它可以将一系列的项目(item)以列表形式呈现,用户可以选中其中的一个或多个项目进行操作。常用的操作包括添加、删除、插入、移动、排序等。

二、使用方法

1.创建列表部件QListWidget

使用PyQt5创建列表部件QListWidget的语法如下所示:

list_widget = QListWidget()

2.添加项目item

使用QListWidget的addItem()方法可以向列表部件中添加项目。语法如下:

list_widget.addItem('item1')
list_widget.addItem('item2')
list_widget.addItem('item3')

也可以使用addItems()方法一次性添加多个项目,参数为一个字符串的列表。语法如下:

list_widget.addItems(['item1', 'item2', 'item3'])

3.获取项目item

可以使用QListWidget的currentItem()方法获取当前选中的项目。语法如下:

current_item = list_widget.currentItem()

或者使用QListWidget的selectedItems()方法获取选中的所有项目。语法如下:

selected_items = list_widget.selectedItems()

4.删除项目item

可以使用QListWidget的takeItem()方法删除指定项目。语法如下:

item = list_widget.takeItem(2)  # 删除第3个项目

也可以使用QListWidget的clear()方法删除所有项目。语法如下:

list_widget.clear()

5.设置项目状态

可以使用QListWidgetItem的setCheckState()方法设置项目的状态,可以是选中、未选中或半选中。语法如下:

item.setCheckState(Qt.Checked)    # 选中
item.setCheckState(Qt.Unchecked)  # 未选中
item.setCheckState(Qt.PartiallyChecked)  # 半选中

也可以使用QListWidgetItem的setText()方法设置项目的文本内容,语法如下:

item.setText('item1')

6.处理项目的点击事件

可以使用QListWidget的itemClicked()信号和对应的槽函数处理项目的点击事件。例如:

def handleClickItem(item):
    print('clicked:', item.text())

list_widget.itemClicked.connect(handleClickItem)

三、示例说明

下面给出两个对QListWidget的简单应用示例。

示例1:使用QListWidget显示文件夹列表

import os
from PyQt5.QtWidgets import QApplication, QListWidget, QWidget, QHBoxLayout, QVBoxLayout


class FolderList(QWidget):
    def __init__(self):
        super().__init__()
        self.list_widget = QListWidget()
        self.init_ui()

    def init_ui(self):
        hbox = QHBoxLayout()
        hbox.addWidget(self.list_widget)
        self.setLayout(hbox)
        self.setGeometry(300, 300, 500, 350)
        self.setWindowTitle('Folder List')

        self.update_list()

    def update_list(self):
        self.list_widget.clear()
        folders = os.listdir('.')
        for folder in folders:
            if os.path.isdir(folder):
                self.list_widget.addItem(folder)

    def show(self):
        super().show()
        self.update_list()


if __name__ == '__main__':
    app = QApplication([])
    folder_list = FolderList()
    folder_list.show()
    app.exec()

该示例中,我们使用QListWidget来显示当前目录下的所有文件夹。首先使用os模块获取当前目录下的所有文件和文件夹,然后对于每一个文件夹,在QListWidget中添加一个项目。每次打开该窗口时,都会更新QListWidget中的项目。

示例2:使用QListWidget实现多选框

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QWidget, QHBoxLayout, QVBoxLayout


class CheckItemList(QWidget):
    def __init__(self):
        super().__init__()
        self.list_widget = QListWidget()
        self.init_ui()

    def init_ui(self):
        hbox = QHBoxLayout()
        hbox.addWidget(self.list_widget)
        self.setLayout(hbox)
        self.setGeometry(300, 300, 500, 350)
        self.setWindowTitle('Check Item List')

        items = ['item1', 'item2', 'item3', 'item4', 'item5']
        for item in items:
            list_item = QListWidgetItem(item)
            list_item.setFlags(list_item.flags() | Qt.ItemIsUserCheckable)
            list_item.setCheckState(Qt.Unchecked)
            self.list_widget.addItem(list_item)

    def show(self):
        super().show()


if __name__ == '__main__':
    app = QApplication([])
    item_list = CheckItemList()
    item_list.show()
    app.exec()

该示例中,我们使用QListWidget实现了多个可选项。对于每一个选项,我们都使用QListWidgetItem的setCheckState()方法设置了它的选择状态,如果被选中了,对应的状态是Qt.Checked,未选中是Qt.Unchecked,半选中是Qt.PartiallyChecked。在初始化时将QListWidgetItem添加到QListWidget中即可。