专业的编程技术博客社区

网站首页 > 博客文章 正文

实战PyQt5: 072-列表部件QListWidget

baijin 2024-10-24 08:50:37 博客文章 15 ℃ 0 评论

QListWidget简介

QListWidget继承自QListView, 它提供与QListView列表视图类似的外观布局,它可以方便地添加和删除部件(QListWidget可以很方便地为条目设置诸如QPushButton, QComboBox这样的部件)。QListWidget使用QListWidgetItem来管理条目,它可以设置成多选择模式。

有两种方法可以将条目(Item)添加到列表中,可以使用列表部件作为其父窗口部件来创建条目,也可以先创建,然后再将其添加到列表中。如果列表中已经存在一些条目,则使用第一种方法更方便一些:

         QListWidgetItem('Oak', listWidget)
         QListWidgetItem('Fir',listWidget)
         QListWidgetItem('Pine',listWidget)

上面的代码向列表添加了三个条目。如果需要在列表特定位置插入条目,那么需要先创建条目,然后调用inseriItem()函数将其插入到指定位置。

         newItem = QListWidgetItem()
         newItem.setText(itemText)
         listWidget.insertItem(row, newItem)

QListWidget常用方法:

  • addItem(): 在列表中添加QListWidgetItem对象或字符串;
  • addItems(): 在列表的尾部添加多个条目;
  • insertItem():在指定索引处插入条目;
  • insertItems():在指定索引处插入多个条目;
  • item():返回指定行的条目;
  • setItemWidget():为指定条目设置一个部件;
  • itemWidget(): 返回指定条目中的部件;
  • clear(): 清除列表中的所有条目;
  • setCurrentItem():设置当前所选的条目;
  • sortItems(): 按升序重新排列条目。

QListWidget常用信号:

  • currentItemChanged: 当列表中的条目发生改变时,发射此信号;
  • currentRowChanged: 当列表中的条目发生改变时,发射此信号;
  • currentTextChanged: 当列表中的条目发生改变时,发射此信号;
  • itemClicked: 当点击列表中的条目时,发射此信号;
  • itemActivated: 激活条目时,发射此信号;
  • itemChanged: 条目数据发生改变时,发射此信号;
  • itemDoubleClicked: 双击列表中的某个条目时,发射此信号;
  • itemEntered: 当鼠标光标进入列表的条目时,发射此信号;
  • itemPressed: 鼠标在列表的条目上按下时时,发射此信号;
  • itemSelectionChanged: 选择发生时,发射此信号。

QListWidget类继承关系:

测试QListWidget

在测试例子中,演示了两种不同的方法来添加字符串类型的QListWidgetItem, 然后演示使用QListWidget.setItemWidget()函数为QListWidgetItem添加一个QPushButton按钮部件和一个QComboBox部件。完整代码如下:

import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QListWidget, QListWidgetItem,
                             QPushButton, QComboBox, QVBoxLayout)
 
class DemoListWidget(QWidget):
    def __init__(self, parent=None):
        super(DemoListWidget, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QListWidget Demo!')      
        # 设置窗口大小
        self.resize(480, 320)
      
        self.initUi()
        
    def initUi(self):
        vLayout = QVBoxLayout(self)       
        listWidget = QListWidget(self)
        
        #使用listWidget作为父窗口部件添加条目
        QListWidgetItem('Text Item 1', listWidget)
        #使用addItem添加条目
        listWidget.addItem('Text Item 2')
        #使用QListWidgetItem添加一个按钮条目
        itemBtn = QListWidgetItem()
        btn = QPushButton('Push Button', self)
        btn.setFixedWidth(100)
        listWidget.insertItem(listWidget.count(), itemBtn)
        listWidget.setItemWidget(itemBtn, btn)
        #使用QListWidgetItem添加一个QComboBox项目
        itemCmbBox = QListWidgetItem()
        cmbBox = QComboBox(self)
        cmbBox.setFixedWidth(100)
        cmbBox.addItems(['Disabled','Enabled'])
        listWidget.insertItem(listWidget.count(), itemCmbBox)
        listWidget.setItemWidget(itemCmbBox, cmbBox)
               
        vLayout.addWidget(listWidget)
        self.setLayout(vLayout)
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoListWidget()
    window.show()
    sys.exit(app.exec())

运行结果如下:

本文知识点

  • 使用不同的方式为QListWidget添加条目;
  • 为QListWidget的条目QListWidgetItem添加一个控件;
  • QListWidget中的条目可添加不同类型的控件。

喜欢本文内容就关注,收藏,点赞,评论和转发。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表