added right-click menu for deleting all/selected list items

This commit is contained in:
2022-12-21 22:41:14 +01:00
parent 9018e37852
commit 5f5c01f319
2 changed files with 47 additions and 0 deletions

View File

@ -2,6 +2,7 @@ from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QListWidget
from .dictlistitem import DictListItem
from ..rclickmenu import RClickMenu
class DictListWidget(QListWidget):
@ -9,6 +10,29 @@ class DictListWidget(QListWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.items = {}
self._add_menu()
def _add_menu(self):
self.menu = menu = RClickMenu(self)
menu.addAction("delete selected", self.delete_selected)
menu.addAction("delete all", self.delete_all)
def delete_selected(self):
selected = self.selectedItems()
for i in selected:
self.items.pop(i.key)
self.deleteItem(i)
def deleteItem(self, itm):
index = self.indexFromItem(itm)
row = index.row()
self.takeItem(row)
def delete_all(self):
self.items.clear()
super().clear()
def get(self, key):
return self.items[key]

23
grum/rclickmenu.py Normal file
View File

@ -0,0 +1,23 @@
from PyQt5.QtCore import Qt, QPoint
from PyQt5.QtWidgets import QMenu, QAction
from PyQt5.QtGui import QCursor
class RClickMenu:
def __init__(self, obj):
self.obj = obj
self.menu = QMenu()
obj.setContextMenuPolicy(Qt.CustomContextMenu)
obj.customContextMenuRequested[QPoint].connect(self.on_show)
def on_show(self):
pos = QCursor.pos()
self.menu.exec(pos)
def addAction(self, name, func):
action = QAction(name, triggered=func, parent=self.obj) # here, parent needs to be set
self.menu.addAction(action)