Учебники

PyGTK — перетаскивание

Виджеты, связанные с X Window, могут перетаскиваться. В программе сначала должен быть указан виджет в качестве источника и / или места назначения для перетаскивания. Виджет, определенный как источник, может отправлять перетаскиваемые данные. Целевой виджет принимает его, когда на него перетаскиваются перетаскиваемые данные.

Следующие шаги участвуют в настройке приложения с поддержкой перетаскивания.

Шаг 1 — Настройка исходного виджета.

Шаг 2 — метод drag_source_set () указывает целевые типы для операции перетаскивания.

widget.drag_source_set(start_button_mask, targets, info)

Шаг 3 — Аргумент start_button_mask указывает битовую маску кнопок, которая запускает операцию перетаскивания.

Шаг 4 — Целевой аргумент — это список кортежей этой структуры —

(target, flags, info)

Целевым аргументом является строка, представляющая тип перетаскивания, например text / plain или image / x-xpixmap.

Шаг 6 — Следующие флаги предопределены —

  • gtk.TARGET_SAME_APP
  • gtk.TARGET_SAME_WIDGET

Шаг 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 () . Если действие было перемещением, и перетаскивание было успешным, то для параметра удаления для параметра drag_finish () будет передано TRUE.
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 () . The gtk.gdk.DragContext . Метод drag_status ( ) должен быть вызван для обновления статуса drag_context .

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