如何利用PyQt實現列表添加刪除排序功能?
本文介紹如何實現列表增加刪除和排序的功能,效果如下:

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())
大家給點鼓勵和支持吧!點贊關注是給我最大的反饋!

浙公網安備 33010602011771號