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.