tkinter.dnd.md
1> **Источник:** https://python-all.ru/3.14/library/tkinter.dnd.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `tkinter.dnd` – Поддержка перетаскивания89**Исходный код:** [Lib/tkinter/dnd.py](https://python-all.ru/src/3.14/Lib/tkinter/dnd.py)1011---1213> **Примечание**14>15> Это экспериментальная возможность, и она будет отмечена как устаревшая, когда будет заменена на Tk DND.1617Модуль `tkinter.dnd` обеспечивает поддержку перетаскивания объектов в пределах одного приложения, в одном окне или между окнами. Чтобы объект можно было перетаскивать, необходимо создать для него привязку события, которая запускает процесс перетаскивания. Обычно событие ButtonPress привязывается к написанной вами функции обратного вызова (см. [Привязки и события](https://python-all.ru/3.14/library/tkinter.html#bindings-and-events)). Функция должна вызывать [`dnd_start()`](https://python-all.ru/3.14/library/tkinter.dnd.html#tkinter.dnd.dnd_start), где 'source' – это перетаскиваемый объект, а 'event' – событие, вызвавшее вызов (аргумент вашей функции обратного вызова).1819Выбор целевого объекта происходит следующим образом:20211. Поиск целевого виджета в области под курсором (сверху вниз)2223> - Целевой виджет должен иметь вызываемый атрибут *dnd\_accept*24> - Если *dnd\_accept* отсутствует или возвращает `None`, поиск переходит к родительскому виджету25> - Если целевой виджет не найден, целевым объектом становится `None`26272. Вызов *\<old\_target\>.dnd\_leave(source, event)*283. Вызов *\<new\_target\>.dnd\_enter(source, event)*294. Вызов *\<target\>.dnd\_commit(source, event)* для уведомления о сбросе305. Вызов *\<source\>.dnd\_end(target, event)* для сигнала об окончании перетаскивания3132#### `class tkinter.dnd.DndHandler(source, event)`3334Класс *DndHandler* обрабатывает события перетаскивания, отслеживая события Motion и ButtonRelease на корневом виджете события.3536#### `cancel(event=None)`3738Отменяет процесс перетаскивания.3940#### `finish(event, commit=0)`4142Выполняет завершающие функции перетаскивания.4344#### `on_motion(event)`4546Проверяет область под курсором на наличие целевых объектов во время выполнения перетаскивания.4748#### `on_release(event)`4950Сигнализирует об окончании перетаскивания, когда срабатывает шаблон отпускания.5152#### `tkinter.dnd.dnd_start(source, event)`5354Фабричная функция для процесса перетаскивания. Возвращает экземпляр [`DndHandler`](https://python-all.ru/3.14/library/tkinter.dnd.html#tkinter.dnd.DndHandler), управляющий перетаскиванием, или `None`, если перетаскивание не удалось запустить.5556> **См. также**57>58> [Привязки и события](https://python-all.ru/3.14/library/tkinter.html#bindings-and-events)59