要實現的功能:有個列表可以增加和刪除
詳細需求:刪除按鈕不會消失為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_())