IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

wxPython Discussion :

Utilisation de la classe rubberband


Sujet :

wxPython

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut Utilisation de la classe rubberband
    Bonjour,
    je tente en vain d'utiliser la classe wx.lib.mixins.rubberband.RubberBand dans mon programme (python v2.6, wxpython v2.8 correspondant) pour faire une selection graphique sur un canvas.

    Deux questions se posent à moi pour l'instant:
    1. ('fondamentale') : si j'instancie un object RubberBand, j'ai bien la possibilité de choisir un rectangle dans mon canvas. Le problème est qu'aucun évènement ne semble être géré par cette classe ( en tout cas d'après la doc, http://www.wxpython.org/docs/api/wx....and-class.html). Donc j'ai du mal à comprendre comment 'attendre' que l'utilisateur ait fini sa sélection.

    2.('pratique') en admettant que je finisse par trouver une solution au problème 1, il se trouve que la sélection faite avec l'objet rubberband actuel ne sot pas limitée au canvas passé en paramètre, et qu'en plus il y ait une sorte de translation entre la position du curseur et le rectangle créé (c'est difficile à décrire, disons que lorsque je fait un premier clique pour démarrer la sélection, ça commence à dessiner un rectangle mais avec le coins haut/gauche décalé d'une dizaine de pixel par rapport à la position de la souris lors du premier clique).
    Pour être plus précis, le code que j'utilise est le suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #..... (partie création de l'interface)
            self.Bind(wx.EVT_BUTTON, self.actionGetZoom, self.btZoom)
     
        def actionGetZoom(self,event):
            R = wx.lib.mixins.rubberband.RubberBand(self.canvas)
            ext = R.getCurrentExtent() #trop tot il faut que j'attende la fin de la sélection
    #....
    J'ai un vague sentiment que la classe n'est plus supporté avec python 2.6 ou un truc du genre, mais rien ne semble l'indiquer sur la doc.
    Quelqu'un aurait-il des information sur l'utilisation de cette classe?

    Merci d'avance,

    David GUEZ

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Je ne connais pas du tout Wx, mais tes questions m'inspire.

    Est-ce-que le RubberBand n'est pas totalement lié aux événements souris ? et, donc qu'il te faille intercepter l'événement "bouton relâché" pour savoir quand l'utilisateur à terminé sa sélection ?

    De même, l'événement "mouvement souris" te permettrais d'afficher en temps réel les dimensions du rectangle en train de se créer, ce qui t'aidera peut-être à la résolution du deuxième problème.

    Cette différence entre le point de départ du rectangle et le point de click laisse à penser qu'il y aurait deux systèmes de coordonnées, autrement dit le point 0, 0 de ton canvas n'est pas le point 0, 0 de son widget parent et tu devrais donc mapper entre ces deux systèmes de coordonnées pour savoir où le curseur était réellement au moment du click.

    Avec Qt, tout ce qui précède est d'application pour l'usage du RubberBand, ce sont donc, peut-être des pistes.

  3. #3
    Membre actif Avatar de davguez
    Homme Profil pro
    Chercheur
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut ha mais alors...
    Intéressant que tu me dises que sous QT il faut gérer les évènements de souris. Ca me semlait bizzare de faire ça en fait, à priori, si j'ai une classe pour gérer la sélection d'une fenêtre je ne m'attends pas à avoir a gérer les choses bas niveau du type clique / déplacement de souris. Sinon il ne me reste plus 'que' à gérer l'affichage du rectangle (un xor suffit je suppose) et je me passe carrément de la classe rubberband non? Mais bon, si tu me dis que c'est comme ça qu'on doit faire sous QT c'est quand même peut-être le signe que je suis un peu exigeant avec wx... à voire...
    Moi j'aurais benoitement imaginé que la classe m'envoie un évènement à elle, du type EVT_LA_FENETRE_EST_PRETE ou bien EVT_FINALLEMENT_L_UTILISATEUR_A_ANNULLE_EN_APPUYANT_SUR_ESC
    (et j'exige des noms de contantes aussi limpides, explicites et faciles d'utilisation)
    En tout cas merci de ta reponse.

    David

Discussions similaires

  1. [Servlet] Utilisation de plusieurs classes
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 04/05/2005, 09h43
  2. Utilisation de la classe List de STL avec wxWidgets
    Par aoyou dans le forum wxWidgets
    Réponses: 7
    Dernier message: 10/03/2005, 17h41
  3. Réponses: 8
    Dernier message: 22/12/2004, 22h57
  4. [SWT] Utilisation de la classe Tracker
    Par arN34 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 24/11/2004, 10h28
  5. Réponses: 2
    Dernier message: 18/05/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo