0
J'essaie d'obtenir que le bouton soit à droite de l'étiquette. Je mets le tuple et je ne sais toujours pas pourquoi il couvre l'étiquette.wxPython Problème de géométrie
Y a-t-il un bon didacticiel sur la géométrie wxpython?
import wx
import wx.lib.agw.gradientbutton as GB
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 !')
self.label.SetBackgroundColour("#000000")
self.label.SetForegroundColour(wx.WHITE)
self.label.SetSize((50, 10))
geo.Add(self.label, (0,0))
self.button = GB.GradientButton(self,label="button")
self.label.SetBackgroundColour("#9e9e9e")
geo.Add(self.button, (0,1))
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()
Votre échantillon est cassé; Je l'ai couru et la fenêtre a pris "sur" mes deux moniteurs et je ne pouvais rien cliquer - a dû utiliser "tty" de Linux pour tuer le processus. –