PyQt QListWidget в Python — виджет представления списка

Класс PyQt QListWidget в Python позволяет создать виджет представления списка, который имеет один столбец элементов. Класс QListWidgetItem представляет элементы в списке.

Знакомство с PyQt QListWidget

QListWidget имеет различные полезные методы для управления элементами, включая:

  • addItems(iterable) – добавляет элементы в список из итерируемого набора строк.
  • addItem(QListWidgetItem) – добавляет элемент в конец списка.
  • insertItem(row, QListWidgetItem) – вставляет элемент в указанную строку.
  • takeItem(row) – удаляет элемент из указанной строки.
  • clear() – удаляет все элементы из списка.

Пример с PyQt QListWidget

В следующем примере показано, как добавлять, вставлять, удалять и очищать все элементы из QListWidget:

PyQt 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)

PyQt QListWidget - получение текста от пользователяДобавление текста в список с помощью метода addItem()

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)

PyQt QListWidget — вставка элементаОтображение вставки элемента

В этом методе 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 для удаления всех элементов из списка.

Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *