PyQt QListWidget в Python — виджет представления списка
Класс PyQt QListWidget в Python позволяет создать виджет представления списка, который имеет один столбец элементов. Класс QListWidgetItem представляет элементы в списке.
Знакомство с PyQt QListWidget
QListWidget имеет различные полезные методы для управления элементами, включая:
- addItems(iterable) – добавляет элементы в список из итерируемого набора строк.
- addItem(QListWidgetItem) – добавляет элемент в конец списка.
- insertItem(row, QListWidgetItem) – вставляет элемент в указанную строку.
- takeItem(row) – удаляет элемент из указанной строки.
- clear() – удаляет все элементы из списка.
Пример с PyQt QListWidget
В следующем примере показано, как добавлять, вставлять, удалять и очищать все элементы из QListWidget:
import sys from PyQt6.QtWidgets import QInputDialog, QApplication, QWidget, QGridLayout, QListWidget, QPushButton from PyQt6.QtGui import QIcon class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setWindowTitle('My Wish List') self.setWindowIcon(QIcon('./assets/wishlist.png')) self.setGeometry(100, 100, 400, 100) layout = QGridLayout(self) self.setLayout(layout) self.list_widget = QListWidget(self) self.list_widget.addItems(['Learn Python', 'Master PyQt']) layout.addWidget(self.list_widget, 0, 0, 4, 1) # create buttons add_button = QPushButton('Add') add_button.clicked.connect(self.add) insert_button = QPushButton('Insert') insert_button.clicked.connect(self.insert) remove_button = QPushButton('Remove') remove_button.clicked.connect(self.remove) clear_button = QPushButton('Clear') clear_button.clicked.connect(self.clear) layout.addWidget(add_button, 0, 1) layout.addWidget(insert_button, 1, 1) layout.addWidget(remove_button, 2, 1) layout.addWidget(clear_button, 3, 1) # show the window self.show() def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok and text: self.list_widget.addItem(text) def insert(self): text, ok = QInputDialog.getText(self, 'Insert a New Wish', 'New Wish:') if ok and text: current_row = self.list_widget.currentRow() self.list_widget.insertItem(current_row+1, text) def remove(self): current_row = self.list_widget.currentRow() if current_row >= 0: current_item = self.list_widget.takeItem(current_row) del current_item def clear(self): self.list_widget.clear() if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec())
Как это работает.
- Сначала создайте объект QListWidget:
self.list_widget = QListWidget(self)
- Во-вторых, добавьте в список список элементов:
self.list_widget.addItems(['Learn Python', 'Master PyQt'])
- В-третьих, создайте четыре кнопки: добавить, вставить, удалить и очистить, и подключите их сигналы нажатия к соответствующему методу.
- В-четвертых, определите метод add(), который получает текст от пользователя и добавляет его в список с помощью метода addItem():
def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok and text: self.list_widget.addItem(text)
QInputDialog.getText() возвращает кортеж из двух элементов. Первый элемент хранит вводимый текст, а второй элемент указывает, нажимает ли пользователь кнопку OK.
Если пользователь вводит текст и нажимает кнопку «ОК», мы добавляем его в список с помощью метода addItem() объекта QListWidget.
Обратите внимание, что вы можете создать объект QListWidgetItem и добавить его в список вместо использования строки. Например:
def add(self): text, ok = QInputDialog.getText(self, 'Add a New Wish', 'New Wish:') if ok and text: list_item = QListWidgetItem() list_item.setText(text) self.list_widget.addItem(list_item)
QListWidgetItem предоставляет больше функциональных возможностей, таких как установка значка для элемента списка.
- В-пятых, вставьте PyQt QListWidget:
def insert(self): text, ok = QInputDialog.getText(self, 'Insert a New Wish', 'New Wish:') if ok and text: current_row = self.list_widget.currentRow() self.list_widget.insertItem(current_row+1, text)
В этом методе insert() мы используем метод currentRow() объекта QListWidget для получения текущей строки выбранного элемента и метод insertItem() для вставки элемента в следующую строку.
- В-шестых, определите метод remove(), который удаляет текущий выбранный элемент из списка:
def remove(self): current_row = self.list_widget.currentRow() if current_row >= 0: current_item = self.list_widget.takeItem(current_row) del current_item
В этом методе remove() мы получаем строку текущего выбранного элемента и используем метод takeItem() объекта QListWidget для удаления элемента.
- В-седьмых, определите функцию clear() для удаления всех элементов из списка:
def clear(self): self.list_widget.clear()
В этом методе clear() мы используем метод clear() объекта QListWidget для удаления всех элементов из списка.