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
相关产品推荐
相关产品推荐

