pyqt5 QListView右键菜单
时间: 2023-12-12 07:05:23 浏览: 135
在 PyQt5 中,可以通过实现 `QListView` 的 `contextMenuEvent()` 方法来添加右键菜单。下面是一个示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QListView, QMenu, QAction
from PyQt5.QtCore import Qt
class MyListView(QListView):
def __init__(self, parent=None):
super().__init__(parent)
self.setContextMenuPolicy(Qt.CustomContextMenu)
self.customContextMenuRequested.connect(self.show_context_menu)
def show_context_menu(self, pos):
menu = QMenu(self)
delete_action = QAction("删除", self)
menu.addAction(delete_action)
action = menu.exec_(self.mapToGlobal(pos))
if action == delete_action:
# do something
pass
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.list_view = MyListView(self)
self.setCentralWidget(self.list_view)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个示例中,我们创建了一个名为 `MyListView` 的子类,继承自 `QListView`。在 `__init__()` 方法中,我们设置了 `contextMenuPolicy` 为 `Qt.CustomContextMenu`,并连接了 `customContextMenuRequested` 信号到 `show_context_menu()` 槽函数。
`show_context_menu()` 方法中,我们创建了一个 `QMenu` 对象,并添加了一个名为 "删除" 的动作。然后,我们调用 `menu.exec_()` 方法来显示右键菜单,并使用 `mapToGlobal()` 方法将 `pos` 转换为全局坐标。
最后,我们可以根据用户选择的动作执行相应的操作。在这个示例中,我们只是在 "删除" 动作中写了一个占位符,你可以在这里添加你自己的代码。
阅读全文