Skip to content

Instantly share code, notes, and snippets.

@quin2
Created July 27, 2020 21:23
Show Gist options
  • Save quin2/cae563c65f6b1c454d4709a8abcb58e6 to your computer and use it in GitHub Desktop.
Save quin2/cae563c65f6b1c454d4709a8abcb58e6 to your computer and use it in GitHub Desktop.
MacOS style editable ListWidget for PyQt5
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QPushButton
from PyQt5.QtCore import Qt
class EditableListWidget(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
self.layout = QVBoxLayout()
self.listWidget = QListWidget()
self.listWidget.itemClicked.connect(self.enableRemove)
self.layout.addWidget(self.listWidget)
self.buttonRow = QHBoxLayout()
self.plus = QPushButton('Add', self)
self.plus.clicked.connect(self.handleAdd)
self.buttonRow.addWidget(self.plus)
self.minus = QPushButton('Remove', self)
self.minus.clicked.connect(self.handleRemove)
self.minus.setEnabled(False)
self.buttonRow.addWidget(self.minus)
self.buttonContainer = QWidget()
self.buttonContainer.setLayout(self.buttonRow)
self.layout.addWidget(self.buttonContainer)
self.setLayout(self.layout)
def handleAdd(self):
self.listWidget.addItem("Placeholder")
def enableRemove(self, item):
self.minus.setEnabled(True)
if item is not None:
item.setFlags(item.flags() | Qt.ItemIsEditable)
item.setSelected(True)
def handleRemove(self):
item = self.listWidget.currentItem()
index = self.listWidget.row(item)
if index is not None:
self.listWidget.takeItem(index)
if self.listWidget.count() == 0:
self.minus.setEnabled(False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment