入门 PyQt6 看过来(案例)12~ 列表增删排序

news2024/11/20 23:43:10

本文介绍如何实现列表增加删除和排序的功能,效果如下:

1 页面设计

1.1 列表

        #列表数据
		self.list = ['福宝', '萌兰', '金虎','蓝天']
        # 创建四行一列标准数据模型
        self.mode=QStandardItemModel(4,1)
        # 将数据中的列表项作为标准数据模型输出
        for i in range(self.mode.rowCount()):
            item = QStandardItem(self.list[i])
            self.mode.setItem(i,0,item)
        self.mode.insertRow(4,QStandardItem("花花回来了"))
        self.listView =QListView()
        self.listView.setModel(self.mode)

该模块引用了QStandardItemModel,创建四行一列的标准数据模型对象,因为我们定义的数据有四个大熊猫名字。然后通过循环遍历将里面的数据对象展示到列表视图上。

1.2 输入框和按钮

接下来是文本输入框和三个按钮的UI设计:

		#文本输入框
		self.le = QLineEdit()
        self.addPb=QPushButton("增加项",clicked=self.addItem)
        self.delPb=QPushButton("删除项",clicked=self.delItem)
        self.sortPb=QPushButton("项目排序",clicked=self.sortItem)

1.3 布局

		#创建水平布局,并将所有元素放进去
		hLayout=QHBoxLayout()
        hLayout.setContentsMargins(0,0,0,0)
        hLayout.addWidget(self.addPb)
        hLayout.addWidget(self.delPb)
        hLayout.addWidget(self.sortPb)
        self.vLayout=QVBoxLayout(self)
        self.vLayout.addWidget(self.listView)
        self.vLayout.addWidget(self.le)
        self.vLayout.addLayout(hLayout)

为了使效果更好看,我们对列表添加了样式表,你可以在这里修改样式,使得列表更好看:

		# 添加样式
        self.listView.setStyleSheet("""
                    QListView {
                        background-color: #E0E0E0;
                        color: #333333;
                        border: 1px solid #BBBBBB;
                    }
                    QListView::Item {
                        padding: 5px;
                    }
                    QListView::Item:hover {
                        background-color: #CCCCCC;
                        color:red;
                    }
                """)

效果如下:

2 功能实现

功能实现很简单,就一个增删排序,配置三个函数:

增加的时候获取文本框里的文字内容,然后通过self.mode.appendRow追加行的方式放到数据model里就可以了。

删除,直接通过self.mode.removeRow删除行就可以了,不过这里设置的是删除最后行,您也可以自己指定删除哪一行。

    #增加
	def addItem(self):
        num=self.mode.rowCount()
        s =self.le.text()
        if s!='':
            self.mode.appendRow(QStandardItem(s))
    #删除
	def delItem(self):
        num=self.mode.rowCount()
        self.mode.removeRow(num-1)
  	#排序
    def sortItem(self):
        self.mode.sort(0)

3 完整代码

给大家列出完整的代码,包含测试的main方法。

# -*- coding:utf-8 -*-
"""
------------------------------------------------
File Name: 列表框2.py
Description:
Author: lzq
date:2024-07-27 15:13
------------------------------------------------
"""
import sys

import PyQt6
from PyQt6.QtCore import Qt, QStringListModel
from PyQt6.QtGui import QPainter, QPixmap, QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QWidget, QTextEdit, QPushButton, QVBoxLayout, QApplication, QRadioButton, QHBoxLayout, \
    QLabel, QCheckBox, QListView, QMessageBox, QLineEdit


class MyWidget(QWidget):
    def __init__(self, parent=None):
        super(MyWidget, self).__init__(parent)
        self.setWindowTitle("列表框QListView 测试2")
        self.resize(500,350)

        self.list = ['福宝', '萌兰', '金虎','蓝天']
        # 创建四行一列标准数据模型
        self.mode=QStandardItemModel(4,1)
        # 将数据中的列表项作为标准数据模型输出
        for i in range(self.mode.rowCount()):
            item = QStandardItem(self.list[i])
            self.mode.setItem(i,0,item)
        self.mode.insertRow(4,QStandardItem("花花回来了"))
        self.listView =QListView()
        self.listView.setModel(self.mode)

        self.le = QLineEdit()
        self.addPb=QPushButton("增加项",clicked=self.addItem)
        self.delPb=QPushButton("删除项",clicked=self.delItem)
        self.sortPb=QPushButton("项目排序",clicked=self.sortItem)

        hLayout=QHBoxLayout()
        hLayout.setContentsMargins(0,0,0,0)
        hLayout.addWidget(self.addPb)
        hLayout.addWidget(self.delPb)
        hLayout.addWidget(self.sortPb)
        self.vLayout=QVBoxLayout(self)
        self.vLayout.addWidget(self.listView)
        self.vLayout.addWidget(self.le)
        self.vLayout.addLayout(hLayout)

        # 添加样式
        self.listView.setStyleSheet("""
                    QListView {
                        background-color: #E0E0E0;
                        color: #333333;
                        border: 1px solid #BBBBBB;
                    }
                    QListView::Item {
                        padding: 5px;
                    }
                    QListView::Item:hover {
                        background-color: #CCCCCC;
                        color:red;
                    }
                """)
    def addItem(self):
        num=self.mode.rowCount()
        s =self.le.text()
        if s!='':
            self.mode.appendRow(QStandardItem(s))
    def delItem(self):
        num=self.mode.rowCount()
        self.mode.removeRow(num-1)
    def sortItem(self):
        self.mode.sort(0)


if __name__=='__main__':
    app = QApplication(sys.argv)
    w = MyWidget()
    w.show()
    sys.exit(app.exec())

大家给点鼓励和支持吧!点赞关注是给我最大的反馈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

17.延迟队列

介绍 延迟队列,队列内部是有序的,延迟队列中的元素是希望在指定时间到了以后或之前取出和处理。 死信队列中,消息TTL过期的情况其实就是延迟队列。 使用场景 1.订单在十分钟内未支付则自动取消。 2.新创建的店铺,如果十天内没…

tomat 启动项目请求中文乱码 日志乱码

tomat 启动项目请求中文乱码 日志乱码 tomat 启动项目请求中文乱码 日志乱码检查tomcat编码检查项目编码检查服务器编码修改catalina.bat 测试 tomat 启动项目请求中文乱码 日志乱码 项目部署后 请求信息中文乱码 {""address":"娴嬭瘯", "Prov…

【Django】ajax和django接口交互(获取新密码)

文章目录 一、需求1. 效果图 二、实验1. 写get接口后端2. 写html后端3. 写前端4. 测试 一、需求 1. 效果图 二、实验 1. 写get接口后端 写views import string import random def getnewpwd(request):words list(string.ascii_lowercasestring.ascii_uppercasestring.digi…

C# form的移植工作

前言: 目标,将一个项目的form移植到新的工程下,且能够正确编译执行: 1 Copy form的两个文件到新工程下: 比如笔者的logo form 2 修改命名空间: 然后,找到新项目的主程序: 的命名…

Hive3:Hive初体验

1、创建表 CREATE TABLE test(id INT, name STRING, gender STRING);2、新增数据 INSERT INTO test VALUES(1, 王力红, 男); INSERT INTO test VALUES(2, 钉钉盯, 女); INSERT INTO test VALUES(3, 咔咔咔, 女);3、查询数据 简单查询 select * from test;带聚合函数的查询 …

vue2和el-input无法修改和写入,并且不报错

文章目录 一. 业务场景描述二. 原因分析三.解决方案3.1 方案一 原生标签(不建议)3.2 方案二 父子传递(不建议)3.3 方案三 vuex,pinia 状态传值(不建议)3.4 方案四 vue初始化属性 (建…

C语言程序设计之链表篇1

程序设计之链表1 链表问题1_1代码1_1结果1_1 问题1_2代码1_2结果1_2 问题1_3代码1_3结果1_3 链表 考查链表的数据结构,需利用指针变量才能实现,一个结点中应包含一个指针变量,用来存放下一个结点的地址。 建立单向链表的一般步骤是&a…

Ubuntu上安装anaconda创建虚拟环境(各种踩坑版)

之前都是在Windows桌面版进行深度学习的环境部署及训练,今天尝试了一下在Ubuntu上进行环境部署,踩了不少坑,提供一些解决办法给大家避雷。 目录 一、下载和安装anaconda 1. 下载 2. 安装 二、创建虚拟环境 一、下载和安装anaconda 1. …

项目管理工具-Maven

文章目录 Maven概述俩个经典的作用Maven 仓库 Maven 常用命令Maven 指令的生命周期Maven 的概念模型Maven 工程的认识 Maven概述 Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一…

记录一次Linux服务器被人使用SSH字典爆破

2024年1.20凌晨睡了一觉,早上起来用termux远程ssh登录小主机发现密码没法登录了,一直显示密码错误,到了晚上用电脑ssh连接小主机,发现小主机真的没法登录了,直接把小主机接上屏幕查看,发现密码被人修改了&a…

什么是Socket、Socket在Java中的应用、Socket和SocketChannel区别

目录 什么是Socket TCP\IP UDP体系结构 Socket和TCP\IP的关系 Socket在Java中的应用 Socket和SocketChannel的区别 SocketChannel和Selector的关系 服务器的设计演化历程---多线程版 服务器的设计演化历程---线程池版 服务器的设计演化历程---Selector版 参考链接 什么…

深度学习loss

pytorch模型训练demo代码 在PyTorch中,模型训练通常涉及几个关键步骤:定义模型、定义损失函数、选择优化器、准备数据加载器、编写训练循环。以下是一个简单的PyTorch模型训练演示代码,该代码实现了一个用于手写数字识别(使用MNIS…

大数据——HBase原理

摘要 HBase 是一个开源的、非关系型的分布式数据库系统,主要用于存储海量的结构化和半结构化数据。它是基于谷歌的 Bigtable 论文实现的,运行在 Hadoop 分布式文件系统(HDFS)之上,并且可以与 Hadoop 生态系统的其他组…

线程与进程的区别与联系,线程状态的切换

目录 什么是线程?进程?协程? 线程和进程的区别? 多线程的好处: 单核CPU有没有必要上多线程? 为什么没有变成单进程多线程的操作系统? 线程的状态 sleep () 和wait&…

1.4 操作系统结构

操作系统的体系结构:操作系统的内核设计(本节内容简要了解即可) 宏内核 & 微内核 操作系统的内核 计算机系统的层次结构将操作系统部分更详细地划分为内核部分和非内核部分 宏内核 & 微内核 从操作系统的内核架构来划分&#xff…

【初阶数据结构篇】时间(空间)复杂度

文章目录 算法复杂度时间复杂度1. 定义2. 表示方法3. 常见时间复杂度4.案例计算分析冒泡排序二分查找斐波那契数列(递归法)斐波那契数列(迭代法) 空间复杂度案例分析冒泡排序斐波那契数列(递归法)斐波那契数…

【ACM独立出版,高录用】第四届物联网与机器学习国际学术会议(IoTML 2024,8月23-25)

2024年第四届物联网与机器学习国际学术会议(IoTML 2024)将于2024年8月23-25日在中国南昌召开。 会议将围绕着物联网和机器学习开展,探讨本领域发展所面临的关键性挑战问题和研究方向,以期推动该领域理论、技术在高校和企业的发展和…

yolov8标注细胞、识别边缘、计算面积、灰度值计算

一、数据标注 1. 使用labelme软件标注每个细胞的边界信息,标注结果为JSON格式 2. JSON格式转yolo支持的txt格式 import json import os import glob import os.path as osp此函数用来将labelme软件标注好的数据集转换为yolov5_7.0sege中使用的数据集:param jsonfi…

数据库技术深度解析与未来趋势展望

数据库技术深度解析与未来趋势展望 引言 在当今信息化高速发展的时代,数据库作为数据存储和管理的核心基础设施,扮演着至关重要的角色。无论是传统行业还是新兴的互联网领域,数据库的稳定性和性能直接影响到业务系统的运行效率和用户体验。本…

计算机基础-IO

一、裸机中的IO 我们先看下计算机的组成部分: 从图中我们很清楚的看到Input/Output 即为 IO,也就是计算机主机和外部设备进行信息的交换。 这种交换可能是磁盘IO也有可能是网络IO。 二、操作系统中的IO 操作系统分为内核态和用户态,且默认…