PyQt QListWidget
last modified August 24, 2023
In this article we show how to work with QListWidget.
Visit Advanced PyQt5 e-book, read PyQt6 tutorial, or list all PyQt tutorials.
PyQt QListWidget
QListWidget provides an item-based list widget.
The addItem function adds a new item at the end of the list. With
addItems function, multiple items can be inserted.
The number of items in the list is found with the count function.
The takeItem function removes an item from the list.
The current item in the list can be found with currentItem, and
changed with setCurrentItem.
PyQt QListWidget simple example
In the following example, we create a simple example featuring
QListWidget.
#!/usr/bin/python
import sys
from PyQt6.QtWidgets import (QListWidget, QWidget, QMessageBox,
QApplication, QVBoxLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout(self)
listWidget = QListWidget()
listWidget.addItem("sparrow")
listWidget.addItem("robin")
listWidget.addItem("crow")
listWidget.addItem("raven")
listWidget.addItem("woodpecker")
listWidget.addItem("hummingbird")
listWidget.itemDoubleClicked.connect(self.onClicked)
vbox.addWidget(listWidget)
self.setLayout(vbox)
self.setGeometry(400, 300, 350, 250)
self.setWindowTitle('QListWidget')
self.show()
def onClicked(self, item):
QMessageBox.information(self, "Info", item.text())
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
if __name__ == '__main__':
main()
We create a QListWidget which has names of birds as its items.
By double-clicking an item, the current bird name is shown in a message box.
listWidget = QListWidget(self)
A QListWidget is created.
listWidget.addItem("sparrow")
listWidget.addItem("robin")
listWidget.addItem("crow")
...
New items are inserted with addItem function.
listWidget.itemDoubleClicked.connect(self.onClicked)
We connect the onClicked function to the
itemDoubleClicked signal.
def onClicked(self, item):
QMessageBox.information(self, "Info", item.text())
The handler function receives the double-clicked item from which we get the
text with the text function. The text is displayed in a message box
with QMessageBox.information.
PyQt QListWidget clear/count
The clear function removes all items from the list and the
count function counts all items.
#!/usr/bin/python
import sys
from PyQt6.QtWidgets import (QListWidget, QPushButton, QWidget, QHBoxLayout,
QMessageBox, QApplication, QVBoxLayout)
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout(self)
hbox = QHBoxLayout()
self.listWidget = QListWidget(self)
self.listWidget.addItems(['sparrow', 'robin', 'crow', 'raven',
'woopecker', 'hummingbird'])
clearBtn = QPushButton('Clear', self)
clearBtn.clicked.connect(self.onClearClicked)
countBtn = QPushButton('Count', self)
countBtn.clicked.connect(self.onCountClicked)
vbox.addWidget(self.listWidget)
hbox.addWidget(clearBtn)
hbox.addWidget(countBtn)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(400, 300, 350, 250)
self.setWindowTitle('QListWidget')
self.show()
def onClearClicked(self):
self.listWidget.clear()
def onCountClicked(self):
QMessageBox.information(self, "Info",
f'# of birds {self.listWidget.count()}')
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
if __name__ == '__main__':
main()
We have two push buttons. The first clears all items and the second counts all items and shows the number in a message box.
clearBtn = QPushButton('Clear', self)
clearBtn.clicked.connect(self.onClearClicked)
countBtn = QPushButton('Count', self)
countBtn.clicked.connect(self.onCountClicked)
Below the QListWidget, we have placed two push buttons. We
add two click handlers.
def onClearClicked(self):
self.listWidget.clear()
In the onClearClicked handler, we remove all items with
clear.
def onCountClicked(self):
QMessageBox.information(self, "Info",
f'# of birds {self.listWidget.count()}')
In the onCountClicked handler, we count the number of items with
count and display the message in a message box.
QListWidget sort items
The sortItems function sorts items in the QListWidget.
#!/usr/bin/python
import sys
from PyQt6.QtWidgets import (QCheckBox, QListWidget, QPushButton, QWidget,
QHBoxLayout, QApplication, QVBoxLayout)
from PyQt6.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout(self)
hbox = QHBoxLayout()
self.listWidget = QListWidget(self)
self.listWidget.addItems(['sparrow', 'robin', 'crow', 'raven',
'woopecker', 'hummingbird'])
self.sortOrder = QCheckBox('Ascending', self)
sortBtn = QPushButton('Sort', self)
sortBtn.clicked.connect(self.onSorted)
vbox.addWidget(self.listWidget)
hbox.addWidget(self.sortOrder)
hbox.addWidget(sortBtn)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.setGeometry(400, 300, 350, 250)
self.setWindowTitle('Sorting items')
self.show()
def onSorted(self):
if self.sortOrder.isChecked():
order = Qt.SortOrder.AscendingOrder
else:
order = Qt.SortOrder.DescendingOrder
self.listWidget.sortItems(order)
def main():
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec())
if __name__ == '__main__':
main()
We have a sort push button. The sorting order is selected with
QCheckBox widget.
def onSorted(self):
if self.sortOrder.isChecked():
order = Qt.SortOrder.AscendingOrder
else:
order = Qt.SortOrder.DescendingOrder
self.listWidget.sortItems(order)
We determine the state of the QCheckBox with isChecked
and choose the sorting order; either Qt.SortOrder.AscendingOrder or
Qt.SortOrder.DescendingOrder. Then we pass the order to the
sortItems function.
In this article we have presented the PyQt QListWidget.
Author
List all PyQt tutorials.