首页 > 其他分享 >如何利用PyQt实现列表添加删除排序功能?

如何利用PyQt实现列表添加删除排序功能?

时间:2024-07-28 13:39:13浏览次数:6  
标签:QListView 排序功能 self PyQt 列表 vLayout mode addWidget hLayout

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

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())

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

标签:QListView,排序功能,self,PyQt,列表,vLayout,mode,addWidget,hLayout
From: https://www.cnblogs.com/luqingteacher/p/18328140

相关文章

  • 30 列表常用方法——append()、insert()、extend()
    append()、insert()、extend()这3个方法都可以用于向列表对象中添加元素。①append()用于向列表尾部追加一个元素。②insert()用于向列表任意指定位置插入一个元素。③extend()用于将另一个列表中的所有元素追加至当前列表的尾部。这3个方法都属于原地操作,不......
  • 14 Python列表操作内置函数(append、+、extend、insert、index、del、pop、remove、len
     欢迎来到@一夜看尽长安花博客,您的点赞和收藏是我持续发文的动力对于文章中出现的任何错误请大家批评指出,一定及时修改。有任何想要讨论的问题可联系我:[email protected]。发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。   专栏:java全栈C&C++PythonAIP......
  • Spotify 将项目添加到播放列表不起作用
    我最近遇到了一个问题,我有一个用户已登录的帐户的播放列表。当我尝试使用API调用将曲目添加到播放列表时。我收到201响应代码和快照ID,表明请求成功。但是,当我检查实际播放列表时,播放列表每次都是空的,添加的歌曲不存在。此外,我有一种方法可以验证歌曲是否在播放......
  • 列表子类的 Python 类型
    我希望能够定义列表子类的内容必须是什么。该类如下所示。classA(list):def__init__(self):list.__init__(self)我想包含键入内容,以便发生以下情况。importtypingclassA(list:typing.List[str]):#Maybesomethinglikethisdef__init__(self):......
  • 比较列表中的标题并找到相似的标题
    我编写了一个Python代码,该代码接收产品标题作为输入,并从演示文稿中查找类似的标题。一切都运行良好,但它错误地识别了一些标题。我认为它错误地识别了带有数字的标题说明:get_price(myProductTitle)函数的输入是一个标题,例如:RazerGoldPINMalaysia7MYR......
  • 当 mypy 无法注释时,为什么它会抱怨列表理解?
    为什么Mypy抱怨它需要列表理解变量的类型注释,而无法使用MyPy注释此类变量?具体来说,如何解决以下错误:fromenumimportEnumMetadefspam(y:EnumMeta):return[[x.value]forxiny]......
  • 如何过滤 pandas 数据帧以查找包含给定列表中所有子字符串的字符串
    我试图过滤掉数据帧的行,其中名称“question”下的字符串列包含给定列表中的所有子字符串。也就是说,如果给定的子字符串列表是['King','England'],那么我需要保留数据框中df.question中的字符串同时包含King和England的所有行。此代码执......
  • C++第十一次课笔记——初始化列表算法、对象成员、静态成员
    一、初始化列表作用:C++提供初始化列表语法,用来初始化属性语法:构造函数():属性1(值1),属性2(值2),…{}classPerson{public: //传统的初始化操作 Person(inta,intb,intc){ m_A=a; m_B=b; m_C=c; } //初始化列表初始化属性 Person(inta,intb,int......
  • QComboBox列表设计
    我想自定义QComboBox列表背景。当我悬停时,我需要一个圆角框。我已附上当前图片和我需要的内容。这是我的样式表代码QComboBox{border:1pxsolidblack;background-color:white;font-size:15pt;padding:1px18px1px3px;}QComboBox:......
  • 获取未来 24 小时内经过我所在位置的所有卫星的列表
    我试图在某些空间物体经过我的位置时收到警报,因此我的计划是使用skyfield通过find_events函数生成通过列表(不关心是否可见,没有海拔限制)并存储通过时间列表带有卫星信息。所以我有完整的TLE跟踪对象列表,我设置了skyfield,它创建的列表很好......但我注意到,经过大约两个小时......