PyGTK - Kéo và thả
Các widget có Cửa sổ X được liên kết có khả năng kéo và thả. Trong chương trình, một widget làm nguồn và / hoặc đích để kéo và thả trước tiên phải được chỉ định. Tiện ích con được xác định là nguồn có thể gửi dữ liệu được kéo. Tiện ích con đích chấp nhận nó khi dữ liệu kéo được thả trên nó.
Các bước sau đây liên quan đến việc thiết lập một ứng dụng hỗ trợ kéo và thả -
Step 1 - Thiết lập một widget nguồn.
Step 2 - Phương thức drag_source_set () chỉ định loại đích cho một thao tác kéo -
widget.drag_source_set(start_button_mask, targets, info)
Step 3 - Đối số start_button_mask chỉ định một bitmask của các nút bắt đầu thao tác kéo.
Step 4 - Đối số đích là danh sách các bộ giá trị của cấu trúc này -
(target, flags, info)
Đối số đích là một chuỗi đại diện cho kiểu kéo, ví dụ: văn bản / thuần túy hoặc hình ảnh / x-xpixmap.
Step 6 - Các cờ sau được xác định trước -
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
Step 7 - Sẽ không có giới hạn vì cờ được đặt thành 0.
Nếu tiện ích không bắt buộc phải hoạt động như nguồn, nó có thể không được đặt -
widget.drag_source_unset()
Tín hiệu nguồn phát ra các tín hiệu. Bảng sau liệt kê các tín hiệu và lệnh gọi lại của chúng.
drag_begin | def drag_begin_cb (widget, drag_context, data): |
drag_data_get | def drag_data_get_cb (widget, drag_context, selection_data, thông tin, thời gian, dữ liệu): |
drag_data_delete | def drag_data_delete_cb (widget, drag_context, data): |
drag_end | def drag_end_cb (widget, drag_context, data): |
Thiết lập tiện ích con đích
Phương thức drag_dest_set () chỉ định widget nào có thể nhận dữ liệu kéo.
widget.drag_dest_set(flags, targets, action)
Tham số cờ có thể nhận một trong các hằng số sau:
gtk.DEST_DEFAULT_MOTION | Thao tác này sẽ kiểm tra xem thao tác kéo có khớp với danh sách các mục tiêu và hành động có thể có của tiện ích này hay không, sau đó gọi drag_status () nếu thích hợp. |
gtk.DEST_DEFAULT_HIGHLIGHT | Điều này sẽ tạo ra điểm nổi bật trên tiện ích con này miễn là kéo qua tiện ích con này |
gtk.DEST_DEFAULT_DROP | Khi thả xảy ra, nếu hành động kéo khớp với danh sách các mục tiêu và hành động có thể có của tiện ích con này drag_get_data()thay mặt cho widget. Bỏ rơi có thành công hay không, hãy gọidrag_finish(). Nếu hành động là một lần di chuyển và kéo thành công, thì TRUE sẽ được chuyển cho tham số xóa thànhdrag_finish(). |
gtk.DEST_DEFAULT_ALL | Nếu được đặt, chỉ định rằng tất cả các hành động mặc định phải được thực hiện. |
Mục tiêu là một danh sách các bộ giá trị chứa thông tin mục tiêu. Đối số hành động là một mặt nạ bit của hoặc kết hợp của một hoặc nhiều giá trị sau:
- gtk.gdk.ACTION_DEFAULT
- gtk.gdk.ACTION_COPY
- gtk.gdk.ACTION_MOVE
- gtk.gdk.ACTION_LINK
- gtk.gdk.ACTION_PRIVATE
- gtk.gdk.ACTION_ASK
Trình xử lý "chuyển động kéo" phải xác định xem dữ liệu kéo có phù hợp hay không bằng cách đối sánh các mục tiêu đích với gtk.gdk.DragContext mục tiêu và tùy chọn bằng cách kiểm tra dữ liệu kéo bằng cách gọi drag_get_data()phương pháp. Cácgtk.gdk.DragContext. drag_status() phương thức phải được gọi để cập nhật drag_context trạng thái.
Trình xử lý "kéo-thả" phải xác định mục tiêu phù hợp bằng cách sử dụng drag_dest_find_target() và sau đó yêu cầu dữ liệu kéo bằng cách sử dụng drag_get_data()phương pháp. Dữ liệu sẽ có sẵn trong trình xử lý "kéo-dữ liệu-nhận".