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()