Background eines widgets anpassen

Plattformunabhängige GUIs mit wxWidgets.
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Background eines widgets anpassen

Beitragvon george » 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.

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


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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder