python tablewidget如何通过右键莱单删除选定行?
时间: 2023-06-16 15:06:20 浏览: 277
可以使用QMenu和QAction来实现通过右键点击删除选定行的功能。具体实现步骤如下:
1. 创建一个QMenu对象,并添加一个QAction,设置它的文本为“删除”。将这个QAction添加到QMenu中。
2. 给QTableWidget对象设置一个右键菜单,当右键点击QTableWidget中的某一行时,弹出这个QMenu。
3. 在QAction的triggered信号中,获取当前选中的行,然后通过QTableWidget的removeRow()方法将这一行删除。
下面是一个示例代码:
```python
from PyQt5.QtWidgets import QMainWindow, QTableWidget, QTableWidgetItem, QMenu, QAction, QMessageBox
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table = QTableWidget(self)
self.table.setRowCount(3)
self.table.setColumnCount(2)
for i in range(3):
for j in range(2):
item = QTableWidgetItem("Item ({}, {})".format(i, j))
self.table.setItem(i, j, item)
self.setCentralWidget(self.table)
self.createContextMenu()
def createContextMenu(self):
self.table.setContextMenuPolicy(Qt.CustomContextMenu)
self.table.customContextMenuRequested.connect(self.showContextMenu)
self.contextMenu = QMenu(self)
self.deleteAction = QAction("删除", self)
self.deleteAction.triggered.connect(self.deleteRow)
self.contextMenu.addAction(self.deleteAction)
def showContextMenu(self, pos):
self.contextMenu.exec_(self.table.mapToGlobal(pos))
def deleteRow(self):
row = self.table.currentRow()
if row == -1:
QMessageBox.warning(self, "警告", "请先选择一行!")
return
self.table.removeRow(row)
```
在这个示例代码中,我们首先创建了一个QTableWidget对象,并为它添加了一些数据。然后,我们实现了createContextMenu()方法来创建一个QMenu对象,并添加了一个QAction项。接着,我们调用了QTableWidget的setContextMenuPolicy()方法,将它的上下文菜单策略设置为Qt.CustomContextMenu,并将customContextMenuRequested信号连接到showContextMenu()方法。在showContextMenu()方法中,我们调用QMenu的exec_()方法显示菜单。在deleteRow()方法中,我们获取当前选中的行,然后调用QTableWidget的removeRow()方法将这一行删除。如果没有选择任何行,我们弹出一个QMessageBox提示用户。
阅读全文