首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[pyqt5]QListView增删改查和添加右键菜单

[pyqt5]QListView增删改查和添加右键菜单

作者头像
云未归来
发布2025-07-20 11:44:58
发布2025-07-20 11:44:58
16500
代码可运行
举报
运行总次数:0
代码可运行

将一批数据list加入到QListView

代码语言:javascript
代码运行次数:0
运行
复制
        slm = QStringListModel()  # 创建model
        slm.setStringList(['111', '222', '333'])  # 将数据设置到model
        self.listView.setModel(slm)

设置某行被选中,这里以第一行选中为例子

代码语言:javascript
代码运行次数:0
运行
复制
        model_index = slm.index(0, 0)
        self.listView.setCurrentIndex(model_index)
        slm.setData(model_index, (255, 0, 0), Qt.BackgroundColorRole)

修改某一行(比如第2行改成aaaaa)

代码语言:javascript
代码运行次数:0
运行
复制
slm = QStringListModel()  # 创建model
slm.setStringList(['111', '222', '333'])  # 将数据设置到model
self.listView.setModel(slm)
slm.setData(slm.index(1), "aaaaa")

删除某行

代码语言:javascript
代码运行次数:0
运行
复制
 indexes = self.listView.selectedIndexes()
        if indexes:
            index = indexes[0]
            slm.removeRow(index.row())

给QListView添加一行数据

代码语言:javascript
代码运行次数:0
运行
复制
 row = slm.rowCount()
 value = '444'
 slm.insertRow(row)
 slm.setData(slm.index(row), value)

给ListView添加右键菜单

代码语言:javascript
代码运行次数:0
运行
复制
 self.listView.setContextMenuPolicy(3)
 self.listView.customContextMenuRequested[QPoint].connect(self.listWidgetContext)

 def listWidgetContext(self, point):
     popMenu = QMenu()
     popMenu.addAction("添加")
     popMenu.addAction("修改")
     popMenu.addAction("删除")
     popMenu.exec_(QCursor.pos())

清空QListView

代码语言:javascript
代码运行次数:0
运行
复制
        slm = QStringListModel()  # 创建model
        slm.setStringList([])  # 将数据设置到model
        self.listView.setModel(slm)

给QListView每一行前面加个小图标

代码语言:javascript
代码运行次数:0
运行
复制
       data_list = [{'img': "football.png", "title": "足球"},
              {"img": "basketball.png", "title": "篮球"},
              {"img": "valleyball.png", "title": "排球"}]

        model = QStandardItemModel()
        for data in self.data_list:
            item = QStandardItem(QIcon(data["img"]), data["title"])
            model.appendRow(item)
        self.listView.setModel(model)

下面给个完整代码大家可以直接跑起来

代码语言:javascript
代码运行次数:0
运行
复制
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'listviewtest.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QStringListModel, Qt, QPoint
from PyQt5.QtGui import QCursor
from PyQt5.QtWidgets import QMenu


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.listView = QtWidgets.QListView(self.centralwidget)
        self.listView.setGeometry(QtCore.QRect(100, 30, 551, 441))
        self.listView.setObjectName("listView")

        slm = QStringListModel()  # 创建model
        slm.setStringList(['111', '222', '333'])  # 将数据设置到model
        self.listView.setModel(slm)

        # 设置选择某行
        model_index = slm.index(0, 0)
        self.listView.setCurrentIndex(model_index)
        slm.setData(model_index, (255, 0, 0), Qt.BackgroundColorRole)
        # 删除某行
        indexes = self.listView.selectedIndexes()
        if indexes:
            index = indexes[0]
            slm.removeRow(index.row())
        # 添加某行
        row = slm.rowCount()
        value = '444'
        slm.insertRow(row)
        slm.setData(slm.index(row), value)
        # 添加右键菜单
        self.listView.setContextMenuPolicy(3)
        self.listView.customContextMenuRequested[QPoint].connect(self.listWidgetContext)

        # 清空列表
        # slm = QStringListModel()  # 创建model
        # slm.setStringList([])  # 将数据设置到model
        # self.listView.setModel(slm)

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def listWidgetContext(self, point):
        popMenu = QMenu()
        popMenu.addAction("添加")
        popMenu.addAction("修改")
        popMenu.addAction("删除")
        popMenu.exec_(QCursor.pos())

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档