You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5 QListWidget添加删除按钮移除选中条目的实现方法咨询

PyQt5 QListWidget 删除条目功能实现方案

实现逻辑说明

核心逻辑是:点击删除按钮时,先检查是否有选中的条目,未选中则提示用户选择;选中则弹出二次确认框,用户确认后移除对应条目。

完整可运行代码

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication,QMainWindow, QListWidget, QListWidgetItem, QMessageBox
import sys

class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.x = 200
        self.y = 200
        self.width = 500
        self.length = 500
        self.setGeometry(self.x, self.y, self.width, self.length)
        self.setWindowTitle("Stock managment")
        self.iniTUI()

    def iniTUI(self):
        # 新增按钮
        self.b1 = QtWidgets.QPushButton(self)
        self.b1.setText("+")
        self.b1.move(450, 100)
        self.b1.resize(50, 25)
        self.b1.clicked.connect(self.take_inputs)
        # 删除按钮
        self.btn_minus = QtWidgets.QPushButton(self)
        self.btn_minus.setText("-")
        self.btn_minus.move(0, 100)
        self.btn_minus.resize(50, 25)
        # ------------------新增:绑定删除按钮点击事件------------------
        self.btn_minus.clicked.connect(self.delete_selected_item)

        # 列表组件
        self.list_widget = QListWidget(self)
        self.list_widget.setGeometry(120, 100, 250, 300)
        self.item1 = QListWidgetItem("A")
        self.item2 = QListWidgetItem("B")
        self.item3 = QListWidgetItem("C")
        self.list_widget.addItem(self.item1)
        self.list_widget.addItem(self.item2)
        self.list_widget.addItem(self.item3)
        self.list_widget.setCurrentItem(self.item2)

    def take_inputs(self):
        # 修正了原代码的换行语法错误
        self.name, self.done1 = QtWidgets.QInputDialog.getText(
            self, 'Add Item to List', 'Enter The Item you want in the list:')
        self.roll, self.done2 = QtWidgets.QInputDialog.getInt(
            self, f'Quantity of {str(self.name)}', f'Enter Quantity of {str(self.name)}:')

        if self.done1 and self.done2:
            new_item = QListWidgetItem(f"{str(self.name)}  Quantity{self.roll}")
            self.list_widget.addItem(new_item)
            self.list_widget.setCurrentItem(new_item)
    
    # ------------------新增:删除条目逻辑方法------------------
    def delete_selected_item(self):
        # 1. 获取当前选中的条目
        current_item = self.list_widget.currentItem()
        # 2. 没有选中条目时弹出提示
        if not current_item:
            QMessageBox.information(self, "提示", "请先选择要删除的条目")
            return
        # 3. 弹出二次确认框,避免误删
        reply = QMessageBox.question(self, "确认删除", f"确定要删除条目【{current_item.text()}】吗?",
                                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        # 4. 用户确认则删除条目
        if reply == QMessageBox.Yes:
            # takeItem参数为要删除的行号,currentRow()返回当前选中条目的索引
            self.list_widget.takeItem(self.list_widget.currentRow())

    def clicked(self):
        self.label.setText("You clicked the button")
        self.update()

    def update(self):
        self.label.adjustSize()

def window():
    apk = QApplication(sys.argv)
    win = MyWindow()
    win.show()
    sys.exit(apk.exec_())
window()

代码修改点详解

  • 导入QMessageBox:PyQt5内置的弹窗组件,用于实现操作提示和二次确认功能,避免用户误删数据
  • 绑定删除按钮信号:self.btn_minus.clicked.connect(self.delete_selected_item) 实现点击减号按钮自动触发删除逻辑
  • 删除逻辑分步说明:
    • 调用currentItem()获取选中条目,返回值为None说明没有选中条目,直接弹提示终止操作
    • 调用QMessageBox.question()弹出确认框,按钮默认选中「取消」,进一步降低误删概率
    • 用户确认删除后调用takeItem()方法传入选中条目的行号,即可完成删除,列表会自动刷新界面

注:原代码中存在的字符串换行、导入语句换行的语法错误,已在上述代码中修正,可直接运行测试

内容的提问来源于stack exchange,提问作者Hashtag 3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 03:00:05