Виджеты, связанные с 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 () . Данные будут доступны в обработчике перетаскивания полученных данных.