- PyGTK 教程
- PyGTK - 首页
- PyGTK - 简介
- PyGTK - 环境配置
- PyGTK - HelloWorld
- PyGTK - 重要类
- PyGTK - 窗口类 (Window Class)
- PyGTK - 按钮类 (Button Class)
- PyGTK - 标签类 (Label Class)
- PyGTK - 输入框类 (Entry Class)
- PyGTK - 信号处理
- PyGTK - 事件处理
- PyGTK - 容器
- PyGTK - 箱式容器类 (Box Class)
- PyGTK - 按钮盒类 (ButtonBox Class)
- PyGTK - 对齐类 (Alignment Class)
- PyGTK - 事件盒类 (EventBox Class)
- PyGTK - 布局类 (Layout Class)
- PyGTK - 组合框类 (ComboBox Class)
- PyGTK - 切换按钮类 (ToggleButton Class)
- PyGTK - 复选框类 (CheckButton Class)
- PyGTK - 单选按钮类 (RadioButton Class)
- PyGTK - 菜单栏、菜单和菜单项 (MenuBar, Menu & MenuItem)
- PyGTK - 工具栏类 (Toolbar Class)
- PyGTK - 调整类 (Adjustment Class)
- PyGTK - 范围类 (Range Class)
- PyGTK - 缩放类 (Scale Class)
- PyGTK - 滚动条类 (Scrollbar Class)
- PyGTK - 对话框类 (Dialog Class)
- PyGTK - 消息对话框类 (MessageDialog Class)
- PyGTK - 关于对话框类 (AboutDialog Class)
- PyGTK - 字体选择对话框
- PyGTK - 颜色选择对话框
- PyGTK - 文件选择对话框
- PyGTK - 笔记本类 (Notebook Class)
- PyGTK - 框架类 (Frame Class)
- PyGTK - 带比例的框架类 (AspectFrame Class)
- PyGTK - 树状视图类 (TreeView Class)
- PyGTK - 分隔窗格类 (Paned Class)
- PyGTK - 状态栏类 (Statusbar Class)
- PyGTK - 进度条类 (ProgressBar Class)
- PyGTK - 视口类 (Viewport Class)
- PyGTK - 滚动窗口类 (Scrolledwindow Class)
- PyGTK - 箭头类 (Arrow Class)
- PyGTK - 图片类 (Image Class)
- PyGTK - 绘图区类 (DrawingArea Class)
- PyGTK - 旋转按钮类 (SpinButton Class)
- PyGTK - 日历类 (Calendar Class)
- PyGTK - 剪贴板类 (Clipboard Class)
- PyGTK - 标尺类 (Ruler Class)
- PyGTK - 超时 (Timeout)
- PyGTK - 拖放
- PyGTK 有用资源
- PyGTK - 快速指南
- PyGTK - 有用资源
- PyGTK - 讨论
PyGTK - 拖放
拥有关联 X 窗口的小部件能够进行拖放操作。在程序中,必须首先指定一个小部件作为拖放操作的源和/或目标。被定义为源的小部件可以发送被拖动的数据。目标小部件在拖动数据被拖放到它上面时接收数据。
设置启用拖放功能的应用程序涉及以下步骤:
步骤 1 - 设置源小部件。
步骤 2 - `drag_source_set()` 方法指定拖放操作的目标类型。
widget.drag_source_set(start_button_mask, targets, info)
步骤 3 - `start_button_mask` 参数指定启动拖放操作的按钮位掩码。
步骤 4 - `target` 参数是一个包含这种结构的元组列表:
(target, flags, info)
`target` 参数是一个字符串,表示拖动类型,例如 text/plain 或 image/x-xpixmap。
步骤 6 - 预定义的标志如下:
gtk.TARGET_SAME_APPgtk.TARGET_SAME_WIDGET
步骤 7 - 由于标志设置为 0,因此没有限制。
如果不需要小部件充当源,可以取消设置:
widget.drag_source_unset()
源信号会发出信号。下表列出了信号及其回调函数。
drag_begin |
def drag_begin_cb(widget, drag_context, data) |
drag_data_get |
def drag_data_get_cb(widget, drag_context, selection_data, info, time, data) |
drag_data_delete |
def drag_data_delete_cb(widget, drag_context, data) |
drag_end |
def drag_end_cb(widget, drag_context, data) |
设置目标小部件
`drag_dest_set()` 方法指定哪个小部件可以接收拖动的数据。
widget.drag_dest_set(flags, targets, action)
`flags` 参数可以取以下常量之一:
gtk.DEST_DEFAULT_MOTION |
这将检查拖动是否与该小部件可能的 target 和 action 列表匹配,然后根据需要调用 `drag_status()`。 |
gtk.DEST_DEFAULT_HIGHLIGHT |
只要拖动位于此小部件上,就会在此小部件上绘制高亮显示。 |
gtk.DEST_DEFAULT_DROP |
当发生放下操作时,如果拖动与该小部件可能的 target 和 action 列表匹配,则代表该小部件调用 `drag_get_data()`。无论放下操作是否成功,都将调用 `drag_finish()`。如果操作是移动并且拖动成功,则将为 `drag_finish()` 的 `delete` 参数传递 `TRUE`。 |
gtk.DEST_DEFAULT_ALL |
如果设置,则指定应执行所有默认操作。 |
`target` 是一个包含 target 信息的元组列表。`actions` 参数是以下值的一个或多个组合的位掩码:
gtk.gdk.ACTION_DEFAULTgtk.gdk.ACTION_COPYgtk.gdk.ACTION_MOVEgtk.gdk.ACTION_LINKgtk.gdk.ACTION_PRIVATEgtk.gdk.ACTION_ASK
“drag-motion” 处理程序必须通过将目标目标与 `gtk.gdk.DragContext` 目标匹配,并通过可选地通过调用 `drag_get_data()` 方法检查拖动数据来确定拖动数据是否合适。必须调用 `gtk.gdk.DragContext.drag_status()` 方法来更新 `drag_context` 状态。
“drag-drop” 处理程序必须使用 `drag_dest_find_target()` 方法确定匹配的 target,然后使用 `drag_get_data()` 方法请求拖动数据。数据将在 “drag-data-received” 处理程序中可用。