Background eines widgets anpassen
Verfasst: Mittwoch 24. Mai 2006, 09:57
Hey,
ich möchte gerne den Background eines widgets(z.B. wx.Toolbar) an meine Bedürfnisse anpassen. Damit meine ich, der Background soll nicht mehr nur mit einer Farbe dargestellt werden, sondern mit einem Gradienten(2 Farben)
Ich habe beispielhaft mir mal eine Klasse geschrieben, die von wx.Toolbar abgeleitet ist und dort im Event OnPaint den Background gezeichnet.
Das funktioniert soweit auch. Problem ist nur, dass wenn ich der Toolbar Toolbar-Buttons hinzufüge, bleiben diese immer im Hintergrund. Also hinter dem gezeichneten Gradienten. Sie sind nicht sichtbar.
Meine Frage ist jetzt, wie kann ich am einfachsten den Background des widgets manipulieren???
Hoffe, ihr könnt mir helfen und ein paar Tipps geben.
Danke
george
ich möchte gerne den Background eines widgets(z.B. wx.Toolbar) an meine Bedürfnisse anpassen. Damit meine ich, der Background soll nicht mehr nur mit einer Farbe dargestellt werden, sondern mit einem Gradienten(2 Farben)
Ich habe beispielhaft mir mal eine Klasse geschrieben, die von wx.Toolbar abgeleitet ist und dort im Event OnPaint den Background gezeichnet.
Code: Alles auswählen
class customToolbar(wx.ToolBar):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.TB_HORIZONTAL | wx.NO_BORDER, name=''):
wx.ToolBar.__init__(self, parent, id=id, pos=wx.DefaultPosition, size=wx.DefaultSize,
style=style, name='')
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.__Colour = mdlGlobDefs.ColourManager.LUNA
def OnPaint(self, event):
self.__SetColours()
dc = wx.PaintDC(self)
rect = self.GetRect()
self.__DrawGradient(dc, rect)
event.Skip()
def __SetColours(self):
if (self.__Colour == mdlGlobDefs.ColourManager.LUNA):
self.__colGradient1 = mdlGlobDefs.ColourManager.colLunaBlue1
self.__colGradient2 = mdlGlobDefs.ColourManager.colLunaBlue2
self.__colBorder = mdlGlobDefs.ColourManager.colLunaBlue1
elif (self.__Colour == mdlGlobDefs.ColourManager.OLIVE):
self.__colGradient1 = mdlGlobDefs.ColourManager.colLunaOlive1
self.__colGradient2 = mdlGlobDefs.ColourManager.colLunaOlive2
self.__colBorder = mdlGlobDefs.ColourManager.colLunaOlive1
elif (self.__Colour == mdlGlobDefs.ColourManager.SILVER):
self.__colGradient1 = mdlGlobDefs.ColourManager.colLunaSilver1
self.__colGradient2 = mdlGlobDefs.ColourManager.colLunaSilver2
self.__colBorder = mdlGlobDefs.ColourManager.colLunaSilver1
def __DrawGradient(self, dc, rect):
if rect.height < 1 or rect.width < 1:
return
col1 = self.__colGradient2
col2 = self.__colGradient1
dc.SetPen(wx.TRANSPARENT_PEN)
r1, g1, b1 = int(col1.Red()), int(col1.Green()), int(col1.Blue())
r2, g2, b2 = int(col2.Red()), int(col2.Green()), int(col2.Blue())
flrect = float(rect.height)
rstep = float((r2 - r1)) / flrect
gstep = float((g2 - g1)) / flrect
bstep = float((b2 - b1)) / flrect
rf, gf, bf = 0, 0, 0
for y in range(rect.y, rect.y + rect.height):
currCol = (r1 + rf, g1 + gf, b1 + bf)
dc.SetBrush(wx.Brush(currCol, wx.SOLID))
dc.DrawRectangle(rect.x, rect.y + (y - rect.y), rect.width, rect.height)
rf = rf + rstep
gf = gf + gstep
bf = bf + bstep
Meine Frage ist jetzt, wie kann ich am einfachsten den Background des widgets manipulieren???
Hoffe, ihr könnt mir helfen und ein paar Tipps geben.
Danke
george