Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

pyGtk et drag&drop

2 réponses
Avatar
Black Myst
Bonjour,

Cela fait 2 semaines que je découvre python, pyGtk et tout ce qui tourne
autour... et je suis tombé sur un os en ce qui concerne le drag&drop.

Mon application se compose d'une grand composant (EventBox) prenant
presque la totalité de la fenêtre (c'est celui qui doit recevoir le
drag&drop), il contient d'autre composant, notamment une zone de texte.

Problème 1 : J'ai fait le nécessaire sur mon Eventbox pour recevoir les
drop que je voulais, que l'on drop sur une zone vide, sur un label, ou
un bouton, c'est bien l'eventBox qui récupère les info de drop... sauf
lorsque l'on survole la zone de text.
Je comprends que le problème viens du fait que la zone de texte se
définie comme une zone capable de recevoir un drop de texte mais je ne
comprends pas pourquoi GTK, voyant que cette zone ne supporte pas le
drop de mon type spécifique ne transmette pas l'information au parent.

J'ai besoin que mon Eventbox soit capable de recevoir un drop sur toute
sa surface, quelque soit les composants qu'elle contient (ceci ne sont
pas connus au moment du developpement.)

Problème 2 : Le résultat du drop dépends de la position de la souris
dans le composant au moment du drop (Le résultat est différent si on
drop près des bords du composant ou au milieu.)
Dans un premier temps, j'avais pensé signaler les différences à
l'utilisateur en changeant le curseur de souris suite à un event
"drag-motion". Cela marche, mais je n'ai aucun moyen de savoir quand
est-ce que le drop se termine pour remettre le curseur normale (L'event
"drag-end" n'est envoyé qu'à la source)


Bon, j'espère avoir été claire...
Black Myst

2 réponses

Avatar
hg
Black Myst <Black_point_Myst_chez_free_point_fr> wrote:

Bonjour,

Cela fait 2 semaines que je découvre python, pyGtk et tout ce qui tourne
autour... et je suis tombé sur un os en ce qui concerne le drag&drop.

Mon application se compose d'une grand composant (EventBox) prenant
presque la totalité de la fenêtre (c'est celui qui doit recevoir le
drag&drop), il contient d'autre composant, notamment une zone de texte.

Problème 1 : J'ai fait le nécessaire sur mon Eventbox pour recevoir les
drop que je voulais, que l'on drop sur une zone vide, sur un label, ou
un bouton, c'est bien l'eventBox qui récupère les info de drop... sauf
lorsque l'on survole la zone de text.
Je comprends que le problème viens du fait que la zone de texte se
définie comme une zone capable de recevoir un drop de texte mais je ne
comprends pas pourquoi GTK, voyant que cette zone ne supporte pas le
drop de mon type spécifique ne transmette pas l'information au parent.

J'ai besoin que mon Eventbox soit capable de recevoir un drop sur toute
sa surface, quelque soit les composants qu'elle contient (ceci ne sont
pas connus au moment du developpement.)

Problème 2 : Le résultat du drop dépends de la position de la souris
dans le composant au moment du drop (Le résultat est différent si on
drop près des bords du composant ou au milieu.)
Dans un premier temps, j'avais pensé signaler les différences à
l'utilisateur en changeant le curseur de souris suite à un event
"drag-motion". Cela marche, mais je n'ai aucun moyen de savoir quand
est-ce que le drop se termine pour remettre le curseur normale (L'event
"drag-end" n'est envoyé qu'à la source)


Bon, j'espère avoir été claire...
Black Myst



Je ne suis pas un pro de pygtk mais:

1) vois-tu une différence de comportement entre Windows et X11 ?
2) wxWindows passe par gtk+ ... regarde leur démo et vois si ça fait le
boulot ... si oui alors c'est un problème dans ton code ou dans pygtk car
tu aura la preuve que gtk+ sait faire ce que tu veux

hg

Avatar
Black Myst
On 22 mai, 22:32, Black Myst <Black_point_Myst_chez_free_point_fr>
wrote:
Problème 2 : Le résultat du drop dépends de la position de la souris
dans le composant au moment du drop (Le résultat est différent si on
drop près des bords du composant ou au milieu.)
Dans un premier temps, j'avais pensé signaler les différences à
l'utilisateur en changeant le curseur de souris suite à un event
"drag-motion". Cela marche, mais je n'ai aucun moyen de savoir quand
est-ce que le drop se termine pour remettre le curseur normale (L'event
"drag-end" n'est envoyé qu'à la source)


Je n'avais pas vue l'évènement "drag_leave" qui corresponds exactement
à
ce que je cherchais...

Mon problème 1 reste entier...

black Myst