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_APP
  • gtk.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_DEFAULT
  • gtk.gdk.ACTION_COPY
  • gtk.gdk.ACTION_MOVE
  • gtk.gdk.ACTION_LINK
  • gtk.gdk.ACTION_PRIVATE
  • gtk.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” 處理程式中可用。

廣告
© . All rights reserved.