Qtablewidget的右键菜单
时间: 2023-08-06 14:05:45 浏览: 119
要在QTableWidget中添加右键菜单,可以使用以下步骤:
1. 创建一个QMenu对象,用于显示右键菜单。
2. 连接表格小部件的customContextMenuRequested()信号到一个槽函数,该槽函数将显示右键菜单。
3. 在槽函数中,使用QTableWidget的currentRow()和currentColumn()方法获取当前选定的单元格的行和列。
4. 使用QTableWidget的item()方法获取当前选定单元格的QTableWidgetItem对象。
5. 在右键菜单中添加所需的操作,例如复制或删除单元格的内容。
下面是一个简单的示例代码:
```python
from PyQt5.QtWidgets import QTableWidget, QTableWidgetItem, QMenu, QAction, QApplication, QMainWindow, QWidget
from PyQt5.QtCore import Qt
class MyTableWidget(QTableWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setRowCount(3)
self.setColumnCount(3)
self.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3'])
self.setVerticalHeaderLabels(['Row 1', 'Row 2', 'Row 3'])
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.showContextMenu)
def showContextMenu(self, pos):
row = self.currentRow()
col = self.currentColumn()
item = self.item(row, col)
menu = QMenu(self)
copyAction = QAction('Copy', self)
deleteAction = QAction('Delete', self)
copyAction.triggered.connect(lambda: QApplication.clipboard().setText(item.text()))
deleteAction.triggered.connect(lambda: self.setItem(row, col, QTableWidgetItem('')))
menu.addAction(copyAction)
menu.addAction(deleteAction)
menu.exec_(self.mapToGlobal(pos))
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.tableWidget = MyTableWidget(self)
self.setCentralWidget(self.tableWidget)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
这个示例创建了一个QTableWidget,它包含3行和3列,并使用水平和垂直标头标记了行和列。它还连接了customContextMenuRequested信号到showContextMenu槽函数。
showContextMenu槽函数获取当前选定的单元格的行和列,以及该单元格的QTableWidgetItem对象。它创建一个QMenu对象,并添加了两个操作:复制和删除。复制操作将当前单元格的文本复制到剪贴板中,而删除操作将当前单元格的内容设置为空。最后,它在右键单击位置显示了菜单。
阅读全文