Документация Python неофициальный перевод

tkinter.dnd – Поддержка перетаскиванияtkinter.dnd – Drag and drop support

Исходный код: Lib/tkinter/dnd.py


Примечание

Это экспериментальная возможность, и она будет отмечена как устаревшая, когда будет заменена на Tk DND.

Модуль tkinter.dnd обеспечивает поддержку перетаскивания объектов в пределах одного приложения, в одном окне или между окнами. Чтобы объект можно было перетаскивать, необходимо создать для него привязку события, которая запускает процесс перетаскивания. Обычно событие ButtonPress привязывается к написанной вами функции обратного вызова (см. Привязки и события). Функция должна вызывать dnd_start(), где 'source' – это перетаскиваемый объект, а 'event' – событие, вызвавшее вызов (аргумент вашей функции обратного вызова).

Выбор целевого объекта происходит следующим образом:

  1. Поиск целевого виджета в области под курсором (сверху вниз)

  • Целевой виджет должен иметь вызываемый атрибут dnd_accept

  • Если dnd_accept отсутствует или возвращает None, поиск переходит к родительскому виджету

  • Если целевой виджет не найден, целевым объектом становится None

  1. Вызов <old_target>.dnd_leave(source, event)

  2. Вызов <new_target>.dnd_enter(source, event)

  3. Вызов <target>.dnd_commit(source, event) для уведомления о сбросе

  4. Вызов <source>.dnd_end(target, event) для сигнала об окончании перетаскивания

class tkinter.dnd.DndHandler(source, event)

Класс DndHandler обрабатывает события перетаскивания, отслеживая события Motion и ButtonRelease на корневом виджете события.

cancel(event=None)

Отменяет процесс перетаскивания.

finish(event, commit=0)

Выполняет завершающие функции перетаскивания.

on_motion(event)

Проверяет область под курсором на наличие целевых объектов во время выполнения перетаскивания.

on_release(event)

Сигнализирует об окончании перетаскивания, когда срабатывает шаблон отпускания.

tkinter.dnd.dnd_start(source, event)

Фабричная функция для процесса перетаскивания. Возвращает экземпляр DndHandler, управляющий перетаскиванием, или None, если перетаскивание не удалось запустить.