qtablewidget删除选中多行
时间: 2023-05-31 11:19:26 浏览: 287
### 回答1:
可以使用以下代码删除QTableWidget中选中的多行:
```python
# 获取选中的行
selected_rows = [index.row() for index in self.tableWidget.selectedIndexes()]
# 去重
selected_rows = list(set(selected_rows))
# 从后往前删除
selected_rows.sort(reverse=True)
for row in selected_rows:
self.tableWidget.removeRow(row)
```
其中,self.tableWidget是QTableWidget对象。首先,获取选中的行,然后去重,最后从后往前删除每一行。
### 回答2:
QTableWidget 是 Qt 库中的一个用于展示表格数据的控件。有时候我们需要在 QTableWidget 中删除选中的多行,这里介绍一种实现方法。
首先,我们需要获取当前选中的行号,然后逐行删除。
```python
# 获取当前选中的行号
selectedRows = self.tableWidget.selectedRanges()
# 循环遍历选中的每一行
for range in selectedRows:
for i in range.topRow(), range.bottomRow()+1:
self.tableWidget.removeRow(i)
```
以上代码中,`selectedRanges()` 方法会返回一个 QTableWidgetSelectionRange 的列表,表示当前选中的所有行、列范围。循环遍历这个列表,然后遍历每个范围的所有行,调用 `removeRow()` 方法逐行删除。
完整代码实现如下:
```python
from PyQt5 import QtWidgets, QtGui, QtCore
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.tableWidget = QtWidgets.QTableWidget(4, 4)
self.tableWidget.setHorizontalHeaderLabels(['列1', '列2', '列3', '列4'])
self.tableWidget.setVerticalHeaderLabels(['行1', '行2', '行3', '行4'])
self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
btn = QtWidgets.QPushButton('删除选中行')
btn.clicked.connect(self.deleteSelectedRows)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.tableWidget)
layout.addWidget(btn)
self.setLayout(layout)
def deleteSelectedRows(self):
# 获取当前选中的行号
selectedRows = self.tableWidget.selectedRanges()
# 循环遍历选中的每一行
for range in selectedRows:
for i in range.topRow(), range.bottomRow()+1:
self.tableWidget.removeRow(i)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
```
以上代码实现了一个有 4 行 4 列的 QTableWidget,选中多行后点击按钮可删除选中行。
### 回答3:
QTableWidget是Qt中常用的表格控件,可以实现数据的表格展示和编辑。在QTableWidget中,如果需要删除选中的多行,可以按照以下步骤进行实现:
1. 获取当前选中的行数
```python
selected_rows = []
for item in table.selectedItems():
row = item.row()
if row not in selected_rows:
selected_rows.append(row)
```
2. 根据选中的行数,逐一删除对应的行数据
```python
selected_rows.sort(reverse=True) # 倒序删除
for row in selected_rows:
table.removeRow(row)
```
完整代码示例:
```python
def remove_rows(table):
# 获取选中行数
selected_rows = []
for item in table.selectedItems():
row = item.row()
if row not in selected_rows:
selected_rows.append(row)
# 倒序删除对应行
selected_rows.sort(reverse=True)
for row in selected_rows:
table.removeRow(row)
```
调用remove_row函数即可删除选中的多行。
阅读全文