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)

Целевой аргумент - это строка, представляющая тип перетаскивания, например 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 (виджет, drag_context, данные):
drag_data_get def drag_data_get_cb (виджет, drag_context, selection_data, информация, время, данные):
drag_data_delete def drag_data_delete_cb (виджет, drag_context, данные):
drag_end def drag_end_cb (виджет, drag_context, данные):

Настройка виджета назначения

Метод 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 Если установлено, указывает, что должны быть выполнены все действия по умолчанию.

Цель - это список кортежей, содержащих информацию о цели. Аргумент действий представляет собой битовую маску или комбинацию одного или нескольких из следующих значений:

  • gtk.gdk.ACTION_DEFAULT
  • gtk.gdk.ACTION_COPY
  • gtk.gdk.ACTION_MOVE
  • gtk.gdk.ACTION_LINK
  • gtk.gdk.ACTION_PRIVATE
  • gtk.gdk.ACTION_ASK

Обработчик "перетаскивания-движения" должен определить, подходят ли данные перетаскивания, сопоставив целевые объекты назначения с gtk.gdk.DragContext целей и, при желании, путем изучения данных перетаскивания путем вызова drag_get_data()метод. Вgtk.gdk.DragContext. drag_status() должен быть вызван для обновления drag_context положение дел.

Обработчик "перетаскивания" должен определить соответствующую цель с помощью drag_dest_find_target() метод, а затем запросить данные перетаскивания с помощью drag_get_data()метод. Данные будут доступны в обработчике "drag-data-Received".