2010-07-19 5 views
0

Je suis nouveau sur wxPython, alors faites comme moi. Je crée une interface graphique personnalisée et j'ai besoin de deux attributs. Tout d'abord, je veux créer une board intérieure d'une couleur différente (le boarder simple et sombre semble trop simple). Deuxièmement, j'ai besoin de lier l'attribut de glisser de sorte que seule l'étiquette permette le glisser par rapport à l'ensemble de l'image.Aide avec une interface graphique personnalisée dans wxpython

Est-ce que quelqu'un a aussi un bon tutoriel sur la gestion de la géométrie wxPython?

import wx 

def GetRoundBitmap(w, h, r): 
    maskColor = wx.Color(0,0,0) 
    shownColor = wx.Color(5,5,5) 
    b = wx.EmptyBitmap(w,h) 
    dc = wx.MemoryDC(b) 
    dc.SetBrush(wx.Brush(maskColor)) 
    dc.DrawRectangle(0,0,w,h) 
    dc.SetBrush(wx.Brush(shownColor)) 
    dc.SetPen(wx.Pen(shownColor)) 
    dc.DrawRoundedRectangle(0,0,w,h,r) 
    dc.SelectObject(wx.NullBitmap) 
    b.SetMaskColour(maskColor) 
    return b 

def GetRoundShape(w, h, r): 
    return wx.RegionFromBitmap(GetRoundBitmap(w,h,r)) 

class FancyFrame(wx.Frame): 
    def __init__(self): 
     style = (wx.CLIP_CHILDREN | wx.STAY_ON_TOP | wx.FRAME_NO_TASKBAR | 
       wx.NO_BORDER | wx.FRAME_SHAPED ) 
     wx.Frame.__init__(self, None, title='Fancy', style = style) 
     self.SetSize((250, 40)) 
     self.SetPosition((500,500)) 
     self.SetTransparent(160) 

     self.Bind(wx.EVT_KEY_UP, self.On_Esc) 
     self.Bind(wx.EVT_MOTION, self.OnMouse) 
     self.Bind(wx.EVT_PAINT, self.OnPaint) 
     if wx.Platform == '__WXGTK__': 
      self.Bind(wx.EVT_WINDOW_CREATE, self.SetRoundShape) 
     else: 
      self.SetRoundShape() 

     self.Show(True) 

     geo = wx.GridBagSizer() 
     self.label = wx.StaticText(self,-1,label=u'Hello !') 
     geo.Add(self.label, (0,2)) 

    def SetRoundShape(self, event=None): 
     w, h = self.GetSizeTuple() 
     self.SetShape(GetRoundShape(w,h, 10)) 


    def OnPaint(self, event): 
     dc = wx.PaintDC(self) 
     dc = wx.GCDC(dc) 
     w, h = self.GetSizeTuple() 
     r = 10 
     dc.SetPen(wx.Pen("#000000", width = 4)) 
     dc.SetBrush(wx.Brush("#9e9e9e")) 
     dc.DrawRoundedRectangle(0,0,w,h,r) 

    def On_Esc(self, event): 
     """quit if user press Esc""" 
     if event.GetKeyCode() == 27 : #27 is Esc 
      self.Close(force=True) 
     else: 
      event.Skip() 

    def OnMouse(self, event): 
     """implement dragging""" 
     if not event.Dragging(): 
      self._dragPos = None 
      return 
     self.CaptureMouse() 
     if not self._dragPos: 
      self._dragPos = event.GetPosition() 
     else: 
      pos = event.GetPosition() 
      displacement = self._dragPos - pos 
      self.SetPosition(self.GetPosition() - displacement) 



app = wx.App() 
f = FancyFrame() 
app.MainLoop() 

Répondre

0

Je ne sais pas quelle bordure vous voulez changer. Parlez-vous de la bordure de l'objet sélectionné? Pour ce qui est de faire glisser des objets, je vous recommande de regarder Whyteboard, un programme de dessin wxPython. Il devrait comment sélectionner et faire glisser les objets assez bien et travailler sur Windows et Linux. Je ne suis pas sûr de Mac ...

Edit: Vous avez oublié d'inclure un lien: http://whyteboard.org/


Mike Driscoll

Blog: http://blog.pythonlibrary.org

Questions connexes