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".