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