> **Источник:** https://python-all.ru/3.9/library/tkinter.dnd.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# [`tkinter.dnd`](https://python-all.ru/3.9/library/tkinter.dnd.html#module-tkinter.dnd) – Поддержка перетаскивания

**Исходный код:** [Lib/tkinter/dnd.py](https://python-all.ru/src/3.9/Lib/tkinter/dnd.py)

---

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

Модуль [`tkinter.dnd`](https://python-all.ru/3.9/library/tkinter.dnd.html#module-tkinter.dnd) предоставляет поддержку перетаскивания для объектов в рамках одного приложения, в одном окне или между окнами. Чтобы сделать объект перетаскиваемым, необходимо создать для него привязку события, запускающую процесс перетаскивания. Обычно событие ButtonPress привязывается к написанной функции обратного вызова (см. [Привязки и события](https://python-all.ru/3.9/library/tkinter.html#bindings-and-events)). Эта функция должна вызвать [`dnd_start()`](https://python-all.ru/3.9/library/tkinter.dnd.html#tkinter.dnd.dnd_start), где 'source' – перетаскиваемый объект, а 'event' – событие, инициировавшее вызов (аргумент функции обратного вызова).

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

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

> - Целевой виджет должен иметь вызываемый атрибут *dnd\_accept*
> - Если *dnd\_accept* отсутствует или возвращает None, поиск переходит к родительскому виджету
> - Если целевой виджет не найден, то целевой объект равен None

2. Вызов *\<old\_target\>.dnd\_leave(source, event)*
3. Вызов *\<new\_target\>.dnd\_enter(source, event)*
4. Вызов *\<target\>.dnd\_commit(source, event)* для уведомления о сбросе
5. Вызов *\<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)`

Фабричная функция для процесса перетаскивания.

> **См. также**
>
> [Привязки и события](https://python-all.ru/3.9/library/tkinter.html#bindings-and-events)
