要实现的功能:有个列表可以增加和删除
详细需求:删除按钮不会消失为0个 新增按钮永远在底部
总结:可以使用insertItem方法将widget插入到列表任意一行
实现截图 ↓
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import *
# 实现的功能:有个列表可以增加和删除
# 详细:删除按钮不会消失为0个 新增按钮永远在底部
class Test(QMainWindow):
def __init__(self):
super().__init__()
self.iniUi()
def iniUi(self):
self.setWindowTitle("列表增删功能")
self.resize(300,300)
self.setFixedSize(self.width(),self.height())
#新建一个QListWidget
self.listwidget = QListWidget(self)
self.listwidget.move(5,5)
self.listwidget.resize(self.width()-10,self.height()-10)
#新建删除按钮
delbtn = self.PushButtonDel()
#新建新增按钮
addbtn = self.PushButtonAdd()
#将删除按钮添加到列表中
delitem = QListWidgetItem()
self.listwidget.addItem(delitem)
self.listwidget.setItemWidget(delitem,delbtn)
#将新增按钮添加到列表中
additem = QListWidgetItem()
self.listwidget.addItem(additem)
self.listwidget.setItemWidget(additem,addbtn)
#删除按钮
def PushButtonDel(self):
btn = QPushButton("删除")
btn.clicked.connect(self.ClickDel)
return btn
#新增按钮
def PushButtonAdd(self):
btn = QPushButton("新增")
btn.clicked.connect(self.ClickAdd)
return btn
#删除槽
def ClickDel(self):
#获取点击的row
button = self.sender()
row = self.listwidget.indexAt(button.pos()).row()
#删除item
self.listwidget.takeItem(row)
#如果删除按钮为0,新增一个删除按钮
if self.listwidget.count() == 1:
# 新建删除按钮
delbtn = self.PushButtonDel()
# 将删除按钮插入到列表中
delitem = QListWidgetItem()
self.listwidget.insertItem(0,delitem)
self.listwidget.setItemWidget(delitem, delbtn)
# 新增槽
def ClickAdd(self):
button = self.sender()
row = self.listwidget.indexAt(button.pos()).row()
#新建删除按钮
delbtn = self.PushButtonDel()
#新建新增按钮
addbtn = self.PushButtonAdd()
#将新建修改成删除按钮
self.listwidget.setItemWidget(self.listwidget.item(row),delbtn)
#将新增按钮添加到列表中
additem = QListWidgetItem()
self.listwidget.addItem(additem)
self.listwidget.setItemWidget(additem,addbtn)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Test()
window.show()
sys.exit(app.exec_())
本作品采用《CC 协议》,转载必须注明作者和本文链接