- 创建QTableView和QStandardItemModel对象,并将其关联。
- 为QTableView设置右键菜单策略为CustomContextMenu。
- 实现自定义的右键菜单方法。
- 将自定义的右键菜单方法关联到QTableView的customContextMenuRequested信号上。
- 在自定义的右键菜单方法中获取选中单元格的索引,并进行对应操作。
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QAction, QTableView, QStandardItemModel
from PyQt5.QtCore import Qt
class CustomTableView(QMainWindow):
def __init__(self):
super().__init__()
# 创建QTableView和QStandardItemModel对象
self.table_view = QTableView(self)
self.model = QStandardItemModel(self)
self.table_view.setModel(self.model)
# 设置右键菜单策略为CustomContextMenu
self.table_view.setContextMenuPolicy(Qt.CustomContextMenu)
# 关联自定义的右键菜单方法到customContextMenuRequested信号
self.table_view.customContextMenuRequested.connect(self.show_custom_context_menu)
self.setCentralWidget(self.table_view)
def show_custom_context_menu(self, pos):
# 创建一个右键菜单
menu = QMenu(self.table_view)
# 获取选中单元格的索引
index = self.table_view.indexAt(pos)
# 添加菜单项和对应的操作
action_1 = QAction("操作1", self)
action_1.triggered.connect(lambda: self.do_something(index))
menu.addAction(action_1)
action_2 = QAction("操作2", self)
action_2.triggered.connect(lambda: self.do_something_else(index))
menu.addAction(action_2)
# 在鼠标右键点击的位置显示右键菜单
menu.exec_(self.table_view.viewport().mapToGlobal(pos))
def do_something(self, index):
# 对选中的单元格执行操作1
print("操作1 - 对单元格 {} 执行某操作".format(index.data()))
def do_something_else(self, index):
# 对选中的单元格执行操作2
print("操作2 - 对单元格 {} 执行另一操作".format(index.data()))
if __name__ == '__main__':
app = QApplication([])
window = CustomTableView()
window.show()
app.exec_()
在这个示例代码中,我们创建了一个自定义的QMainWindow类,其中包含一个QTableView控件。在show_custom_context_menu方法中,我们创建了一个右键菜单,并添加了两个菜单项操作。在do_something和do_something_else方法中,我们可以自定义每个菜单项的具体操作。