PyGTK-드래그 앤 드롭

연결된 X Window가있는 위젯은 끌어서 놓을 수 있습니다. 프로그램에서 드래그 앤 드롭을위한 소스 및 / 또는 대상으로 위젯을 먼저 지정해야합니다. 소스로 정의 된 위젯은 드래그 된 데이터를 보낼 수 있습니다. 대상 위젯은 드래그 된 데이터를 드롭 할 때이를 수락합니다.

다음 단계는 끌어서 놓기 가능 응용 프로그램을 설정하는 데 관여합니다.

Step 1 − 소스 위젯 설정.

Step 2 − drag_source_set () 메서드는 드래그 작업의 대상 유형을 지정합니다 −

widget.drag_source_set(start_button_mask, targets, info)

Step 3 − start_button_mask 인수는 드래그 작업을 시작하는 버튼의 비트 마스크를 지정합니다.

Step 4 − 대상 인수는이 구조의 튜플 목록입니다 −

(target, flags, info)

target 인수는 드래그 유형을 나타내는 문자열입니다 (예 : text / plain 또는 image / x-xpixmap).

Step 6 − 다음 플래그가 미리 정의되어 있습니다 −

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Step 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 드래그가이 위젯의 ​​가능한 대상 및 작업 목록과 일치하는지 확인한 다음 적절하게 drag_status ()를 호출합니다.
gtk.DEST_DEFAULT_HIGHLIGHT 드래그가이 위젯 위에있는 동안이 위젯에 하이라이트를 그립니다.
gtk.DEST_DEFAULT_DROP 드롭이 발생할 때 드래그가이 위젯의 ​​가능한 대상 및 작업 목록과 일치하면 drag_get_data()위젯 대신. 드롭 성공 여부에 관계없이 전화drag_finish(). 동작이 이동이고 드래그가 성공한 경우 삭제 매개 변수에 대해 TRUE가 전달됩니다.drag_finish().
gtk.DEST_DEFAULT_ALL 설정된 경우 모든 기본 작업을 수행하도록 지정합니다.

대상은 대상 정보를 포함하는 튜플 목록입니다. 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_dest_find_target() 방법을 사용하여 드래그 데이터를 요청하십시오. drag_get_data()방법. 데이터는 "drag-data-received"핸들러에서 사용할 수 있습니다.