Найти тему
programmer's notes (python and more)

Программирование на языке Python. Библиотека PyQT5. Элементы окна, продолжение (QListWidget)

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

PyQt5 и элемент окна QListWidget

Сегодня занимаемся очень интересным элементом окна QWidget списком QListWidget. Следует иметь в виду, что список состоит из объектов класса QListWidgetItem. Ну об этом классе мы ещё в своё время поговорим. Сегодня же мы обойдёмся без знания этого класса, ну почти, косвенно используя метод text().

Рассмотрим следующую программу (ссылка на полный текст программы см. внизу статьи). В окне следующие элементы (см. Рисунок 1 с левого верхнего угла): поле ввода для помещения туда строки, которая потом будет добавлена в список, кнопка Добавить для добавления строки в список, поле ввода для отображения выбранного в списке элемента, кнопка Удалить, для удаления выбранного элемента, наконец, список строковых элементов. Программа не будет добавлять уже существующую в списке строку. Для удаления элемента нужно его выбрать с помощью мыши (щёлкнуть по нему). Для следующего удаления необходим повторный щёлчок по элементу, который нужно удалить. Т.е. программа содержит довольно законченный интерфейс работы со списком.

Фрагмент 1 программы, полный текст программы см. по ссылке ниже
Фрагмент 1 программы, полный текст программы см. по ссылке ниже

Во фрагменте 1 представлен класс окна (QWidget - Example). В методе initUI(), как обычно добавляются все элементы. Все элемент добавляются непосредственно из библиотеки (QlineEdit, QPushButton), ну кроме самого списка (QListWidget), для которого создан отдельный класс (см. Фрагмент 2).

Во фрагменте 1 для важны обработки нажатия кнопок для добавления в список и удаления из списка. Добавляются только не пустые строки и только строки, которых нет в списке. Проверка того, есть ли уже такая строка в списке осуществляется методом QListWidget.findItems(). Вообще метод ищет все совпадения, которые можно получить при использовании флага Qt.MatchExactly. Результатом поиска является список. Но не строк, а элементов QListWidgetItem - не забывайте об этом.

Удаление элемента из списка осуществляется методом QListWidget.takeItem(). Аргументом служит номер строки в списке QListWidget. Глобальная переменная ind содержит либо None, т.е. строка не выбрана, либо номер выбранной строки. После удаления ind снова становится равным None.

Фрагмент 2 программы (класс, наследующий QListWidget), полный текст программы см. по ссылке ниже
Фрагмент 2 программы (класс, наследующий QListWidget), полный текст программы см. по ссылке ниже

Фрагмент 2 содержит класс наследующий от QListWidget. Обращу внимание на метод QListWidget.setSortingEnabled(), который у нас устанавливает, что список автоматически сортируется. Программа обрабатывает сигнал QListWidget.itemClicked(), т.е. щелчок по элементу списка. При этом номер строки в списке присваивается переменной ind (QListWidget.currentRow()). Саму же строку в списке мы получаем как QListWidget.currentItem().text(). Не забываем, что wg это объект QWidget, где расположены все элементы окна.

primer217.py

Рисунок 1
Рисунок 1

Ну, пока всё!

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Вы не входите в мой список программистов
Вы не входите в мой список программистов