Salut à tous,

Voilà un peu plus d'une heure que je cherche sur le net sans résultats, et je n'ai toujours pas trouvé. Je m'en remets donc à vous. En plus, je suis sûr que c'est un truc tout con !

Je veux poser un wx.Gradient sur le background de mon Panel. L'utilisateur peut choisir le type de Gradient utilisé, sa direction, sa couleur. La direction est définie par la variable self.grad qui prend différentes valeurs en fonction de ce que l'on veut. Pour simplifier, j'ai retiré le choix de la couleur (qui est dans une autre variable) et je l'ai remplacé par un wx.RED (pour faire contraste avec la couleur de l'écriture).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
import wx
 
 
class MyApp(wx.Frame):
    def __init__(self,parent=None,id=-1,title=u"MyAPP",fichier=""):
 
        self.fen1=wx.Frame(None,-1,title=u"Quizz Reader",size=(520,130),style=wx.DEFAULT_FRAME_STYLE)
        self.pan2=wx.Panel(self.fen1,-1,size=self.fen1.GetClientSize())
        self.sizer2=wx.GridBagSizer(20,20)
 
        self.pan2.Bind(wx.EVT_PAINT,self.OnPaint)
 
    def OnPaint(self,evt=None):
 
        size=self.pan2.GetRect() ## <-- La taille est variable
 
        if self.grad==11:
            wx.WindowDC(self.pan2).GradientFillLinear((0,0,size[2]/2,size[3]),wx.RED,wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENU),wx.WEST)
            wx.WindowDC(self.pan2).GradientFillLinear((size[2]/2,0,size[2]/2+1,size[3]),wx.RED,wx.SystemSettings.GetColour(wx.SYS_COLOUR_MENU),wx.EAST)
 
        elif ... etc etc etc ...
 
        evt.Skip()
 
if __name__=='__main__':
    app=wx.App()
    frame=MyApp()
    app.MainLoop()
Pourquoi un WindowDC ? Je ne sais pas vraiment ... Je les ai essayé un peu tous et j'ai vu que c'était celui-là qui correspondait le mieux à mes attentes. A vrai dire je comprends pas très bien la doc wxPython sur tous les DC alors j'ai mis un peu au pif.

Mais maintenant, rajoutons un widget quelconque dans la fonction __init__(...):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
self.static1=wx.StaticText(self.pan2,-1,label="Salut 1",style=wx.ALIGN_CENTRE)
self.static2=wx.StaticText(self.pan2,-1,label="Salut 2",style=wx.ALIGN_CENTRE,wx.TRANSPARENT_WINDOW)
 
self.sizer2.Add(self.static1,pos=(1,1),flag=wx.ALIGN_CENTRE)
self.sizer2.Add(self.static2,pos=(1,2),flag=wx.ALIGN_CENTRE)
 
self.top1.SetSizer(self.sizer2)
self.top1.Show(True)
Il y a un solide de la couleur du Panel d'origine qui persiste autour du widget.
Je voudrais supprimer ce solide autour du widget et que son background s'adapte à la couleur de celui du Panel.

Peut-être que je n'ai pas utilisé le bon wx.DC ? Comme je le dis, je ne comprends rien à ces trucs.
Je pense que je suis pas le premier à avoir eu ce genre de problème.
J'espère que j'ai été assez clair et que vous pourrez m'aider

Merci beaucoup d'avance
A bientôt

Lotendan