2010-03-13 5 views
2

J'ai 3 panneaux et je veux faire des traînées sur eux. Le problème est que quand je fais un glisser sur un cela se produit: http://img41.yfrog.com/img41/9043/soundlog.png http://img41.yfrog.com/img41/9043/soundlog.pngComment effacer le contenu d'une trame wxpython lorsque vous faites glisser un panneau?

Comment puis-je actualiser le cadre de happear sa couleur lorsque le panneau n'est plus là?

Voici le code que je dois faire le glisser:

def onMouseMove(self, event): 
    (self.pointWidth, self.pointHeight) = event.GetPosition() 
    (self.width, self.height) = self.GetSizeTuple() 
    if (self.pointWidth>100 and self.pointWidth<(self.width-100) and self.pointHeight < 15) or self.parent.dragging: 
     self.SetCursor(wx.StockCursor(wx.CURSOR_SIZING)) 

     """implement dragging""" 
     if not event.Dragging(): 
      self.w = 0 
      self.h = 0 
      return 
     self.CaptureMouse() 
     if self.w == 0 and self.h == 0: 
      (self.w, self.h) = event.GetPosition() 
     else: 
      (posw, posh) = event.GetPosition() 
      displacement = self.h - posh 
      self.SetPosition(self.GetPosition() - (0, displacement)) 
    else: 
     self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) 

def onDraggingDown(self, event): 
    if self.pointWidth>100 and self.pointWidth<(self.width-100) and self.pointHeight < 15: 
     self.parent.dragging = 1 
     self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) 
     self.SetBackgroundColour('BLUE') 
     self.parent.SetTransparent(220) 
     self.Refresh() 

def onDraggingUp(self, event): 
    self.parent.dragging = 0 
    self.parent.SetTransparent(255) 
    self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW)) 

et ce sont les binds pour ces évènements:

self.Bind(wx.EVT_MOTION, self.onMouseMove) 
self.Bind(wx.EVT_LEFT_DOWN, self.onDraggingDown) 
self.Bind(wx.EVT_LEFT_UP, self.onDraggingUp) 

Avec cela, si je clique sur le haut de la panneau, et descendre ou monter, la position du panneau change (je fais glisser le panneau) à la position de la souris.

+0

Qu'entendez-vous par "faire glisser sur eux"? pouvez-vous mettre un échantillon de code autonome qui démontre le problème? –

+0

J'ai mis le code, le comprenez-vous maintenant? –

+0

Pouvez-vous mettre du code que je peux simplement exécuter sans copier coller, donc je peux voir le problème de première main et le réparer. –

Répondre

1

Pour rafraîchir le parent sur chaque repositionnement de self, vous pouvez ajouter

self.parent.Refresh() 

juste après votre appel existant à self.SetPosition dans votre méthode def onMouseMove. Pour le moment, vous actualisez le cadre uniquement dans la méthode def onDraggingDown, c'est-à-dire que vous cliquez et maintenez enfoncé le bouton gauche de la souris pour la première fois, et non chaque fois que la souris est déplacée. lui-même).

Je n'ai pas pu télécharger votre code à des fins de test, en raison du site plutôt "spammy" que vous avez choisi de télécharger vers - le site ne cesse de me bombarder avec des publicités, pas moyen de faire le téléchargement , se plaignant parfois de ne pas supporter ma machine (j'utilise un Mac et Google Chrome, le site à certains endroits insiste sur Windows avec IE ou Firefox ...), etc etc Je suis sûr que vous pouvez trouver d'autres sites, plus utilisable que celui-là, pour les gens qui essaient de vous aider! -)

+0

J'ai déjà testé self.parent.Refresh() avant de poser cette question :( –

Questions connexes