- 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” 處理程式中可用。