下面我来详细讲解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中即可。