PyGTK - Glisser-déposer
Les widgets associés à X Window sont capables de glisser-déposer. Dans le programme, un widget comme source et / ou destination pour le glisser-déposer doit d'abord être désigné. Le widget défini comme source peut envoyer les données déplacées. Le widget de destination l'accepte lorsque des données glissées y sont déposées.
Les étapes suivantes sont impliquées dans la configuration d'une application activée par glisser-déposer -
Step 1 - Mise en place d'un widget source.
Step 2 - La méthode drag_source_set () spécifie les types de cibles pour une opération glisser -
widget.drag_source_set(start_button_mask, targets, info)
Step 3 - L'argument start_button_mask spécifie un masque de bits de boutons qui démarre l'opération de glissement.
Step 4 - L'argument cible est une liste de tuples de cette structure -
(target, flags, info)
L'argument cible est une chaîne représentant le type de glissement, par exemple, text / plain ou image / x-xpixmap.
Step 6 - Les drapeaux suivants sont prédéfinis -
- gtk.TARGET_SAME_APP
- gtk.TARGET_SAME_WIDGET
Step 7 - Il n'y aura aucune limitation car l'indicateur est mis à 0.
Si le widget n'est pas obligé d'agir comme source, il peut être désactivé -
widget.drag_source_unset()
Le signal source émet des signaux. Le tableau suivant répertorie les signaux et leurs rappels.
drag_begin | def drag_begin_cb (widget, drag_context, données): |
drag_data_get | def drag_data_get_cb (widget, drag_context, selection_data, info, heure, données): |
drag_data_delete | def drag_data_delete_cb (widget, drag_context, données): |
drag_end | def drag_end_cb (widget, drag_context, données): |
Configurer un widget de destination
La méthode drag_dest_set () spécifie quel widget peut recevoir des données déplacées.
widget.drag_dest_set(flags, targets, action)
Le paramètre flags peut prendre l'une des constantes suivantes -
gtk.DEST_DEFAULT_MOTION | Cela vérifie si le glisser correspond à la liste des cibles et actions possibles de ce widget, puis appelle le drag_status () selon le cas. |
gtk.DEST_DEFAULT_HIGHLIGHT | Cela dessine un surlignage sur ce widget tant qu'un glissement est sur ce widget |
gtk.DEST_DEFAULT_DROP | Lorsqu'un dépôt se produit, si le glissement correspond à la liste des cibles et actions possibles de ce widget, appelez drag_get_data()au nom du widget. Que le drop réussisse ou non, appelezdrag_finish(). Si l'action était un déplacement et que le glissement a réussi, TRUE sera passé pour le paramètre de suppression àdrag_finish(). |
gtk.DEST_DEFAULT_ALL | S'il est défini, spécifie que toutes les actions par défaut doivent être entreprises. |
La cible est une liste de tuples contenant des informations sur la cible. L'argument actions est un masque de bits ou une combinaison d'une ou plusieurs des valeurs suivantes -
- gtk.gdk.ACTION_DEFAULT
- gtk.gdk.ACTION_COPY
- gtk.gdk.ACTION_MOVE
- gtk.gdk.ACTION_LINK
- gtk.gdk.ACTION_PRIVATE
- gtk.gdk.ACTION_ASK
Le gestionnaire "drag-motion" doit déterminer si les données de glissement sont appropriées en faisant correspondre les cibles de destination avec le gtk.gdk.DragContext cibles et éventuellement en examinant les données de glissement en appelant le drag_get_data()méthode. legtk.gdk.DragContext. drag_status() doit être appelée pour mettre à jour la drag_context statut.
Le gestionnaire "glisser-déposer" doit déterminer la cible correspondante à l'aide du drag_dest_find_target() puis demandez les données de glissement à l'aide de la drag_get_data()méthode. Les données seront disponibles dans le gestionnaire "glisser-données-reçues".