"tkinter.dnd" --- 拖放操作支持
******************************

**源代码:** Lib/tkinter/dnd.py

======================================================================

备注:

  此模块是实验性的且在为 Tk DND 所替代后将被弃用。

"tkinter.dnd" 模块为单个应用程序内的对象提供拖放支持，可以在同一窗口内
或多个窗口间进行。 要使一个对象可被拖动，你必须为其创建一个启动拖放过
程的事件绑定。 通常，你要将 ButtonPress 事件绑定到你编写的回调函数 (参
见 绑定和事件)。 该函数应当调用 "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)

      Inspect area below mouse for target objects while a drag is
      performed.

   on_release(event)

      当释放模式被触发时表明拖动的结束。

tkinter.dnd.dnd_start(source, event)

   Factory function for the drag-and-drop process. Return the
   "DndHandler" instance managing the drag, or "None" if a drag could
   not be started.

参见: 绑定和事件
