PyQt5刪除QListWidget中的item

哦...發表於2020-12-01

app = qtw.QApplication(sys.argv)
win = qtw.QMainWindow()

def build():
    ui = d1.Ui_Form()
    ui.setupUi(win)
    ui.pbtn_add.clicked.connect(add_item)
    ui.pbtn_remove.clicked.connect(remove_item)

def add_item():
    lst = win.findChild(QListWidget,'lw')
    item = qtw.QListWidgetItem(lst)
    dt = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    item.setText(dt)
    item.setToolTip(f'當前時間:{dt}')

def remove_item():
    lst = win.findChild(QListWidget,'lw')
    if lst.count()>0:
        for i in range(lst.count()-1,-1,-1):
            item = lst.item(i)
            if item.isSelected():
               lst.removeItemWidget(lst.takeItem(i))
                
def main():
    build()
    win.show()
    sys.exit(app.exec())

main()

新增按鈕會在QListWidget中新增當前的事件,而刪除按鈕是用來刪除選中的QListWidgetItem物件的.

刪除按鈕的點選訊號連線到了槽函式remove_item,函式首先利用容器和QListWidget的objectName反射找到QListWidget物件.

然後開始遍歷QListWidget中的item,因為遍歷要跟著刪除,所以採用倒遍歷的方式.

如果發現一個item是被選中的,那麼要用takeItem函式將這個位置的item選出來,選出會讓該item與QListWidget割斷聯絡,然後再用removeItemWidget將其刪除.

QListWidget只能刪除割斷聯絡的item,所以,沒有選出(takeItem)的item是不能被刪除的.

相關文章