【PyQt5】使用 QListWidget 實現 刪除 與 新增

rockrabbit發表於2019-10-27

要實現的功能:有個列表可以增加和刪除

詳細需求:刪除按鈕不會消失為0個 新增按鈕永遠在底部

總結:可以使用insertItem方法將widget插入到列表任意一行

實現截圖 ↓

【PyQt5】使用 QListWidget 實現 刪除 與 新增

#!/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_())

相關文章