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

Программирование на языке Python. PyQt5 и технология 'Drag and Drop'

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

Технология Drag and Drop для двух списков (QListWidget)

О сколько нам открытий чудных готовит ещё PyQt5? Ну есть ещё в запасниках кое-что. Да, я технологию "drag and drop" всегда не очень жаловал. Ну это чисто мои заморочки, связанные с тем с чего я когда-то начинал путь в программировании.

И так, что такое "drag and drop"? Это способ перетаскивания элементов в окне с одного места в другое или в более простых случаях из одного контейнера в другой. Сам процесс перетаскивания следующий: 1. Переводим курсор мыши на нужный элемент. 2. Фиксируем захват правой кнопкой мыши. 3. Тащим в нужное место. 4. Отпускаем кнопку мыши - "роняем" элемент. Замечу, что механизм этот можно реализовать самому (ручкам) и в одной из следующих статей я это продемонстрирую. Но сегодня просто воспользуемся возможностями библиотеки PyQt5.

Наша задача проста. В окне есть два списка, нужно реализовать перетаскивание элементов из одного в списка в другой и обратно (см. Рисунок и Рисунок 2).

Но прежде всего вспомним статьи, в которых я описывал работу со списками (QListWidget). Это статьи 1 и 2. Познакомьтесь с ними, если забыли материал.

Программа, представленная ниже, реализует следующую функциональность:

  • возможность перетаскивания элементов между списками;
  • при перетаскивании элемент перемещается в другой список и удаляется из первого;
  • возможность перетаскивать внутри списка.
Пример программы с перетаскиванием элементов между списками. Текст программы см. ниже по ссылке
Пример программы с перетаскиванием элементов между списками. Текст программы см. ниже по ссылке
primer310.py

Пояснение к программе

  • В программе реализованы списки с пиктограммами и подписями к ним (QListWidget.IconMode).
  • Ранее мы уже разбирали использование пиктограмм с списках. В начале создаются объекты: QtGui.QIcon(p1), где p1 - имя изображения на диске. Потом создаётся объект "Элемент списка" - QListWidgetItem(). Потом элемент добавляется в список: QListWidget.addItem().
  • Для каждого списка указывается: QListWidget.setAcceptDrops(True) и QListWidget.setDragEnabled(True). Т.е. каждый из каждого списка можно перетаскивать элемент и в каждый список можно "ронять" элемент.
  • Разрешено перетаскивать внутри списков QListWidget.InternalMove и перетаскивание между списками QAbstractItemView.DragDrop.
  • При перетаскивании в другой список элемент из списка удаляется.
Рисунок 1. Можно перетаскивать элементы с левого списка в правый.
Рисунок 1. Можно перетаскивать элементы с левого списка в правый.
Рисунок 2. Теперь все элементы в правом списке. При желании можно вернуть их обратно в левый
Рисунок 2. Теперь все элементы в правом списке. При желании можно вернуть их обратно в левый

Пока всё!

Приложения на основе библиотеки PyQt на Python | programmer's notes (python and more) | Дзен

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

Развитие пользовательских интерфейсов убивает старое доброе программирование
Развитие пользовательских интерфейсов убивает старое доброе программирование