Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/02/2007, à 11:50

Gari

[Python] label.SetBackgroundColour

Salut à tous,

je me suis mis à Python + WxPython, et j'ai un petit soucis d'affichage graphique. Lorsque je tente de mettre une couleur de fond à un label, ça ne fonctionne pas (il ne plante pas, mais il ne met pas de couleur).
Pourtant, cela fonctionne avec d'autres objets.
Ceci ne fonctionne pas :

self.label.SetBackgroundColour(wx.BLUE)

Alors que ceci fonctionne (le bouton prend bien un beau bleu en fond) :

button.SetBackgroundColour(wx.BLUE)

Voici le code complet (je suis sur le tutoriel de SebSauvage) :

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

try:
    import wx
except ImportError:
    raise ImportError,"The wxPython module is required to run this program"

class simpleapp_wx(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title)
        self.parent = parent
        self.initialize()

    def initialize(self):
        sizer = wx.GridBagSizer()

        self.entry = wx.TextCtrl(self,-1,value=u"Enter text here.")
        sizer.Add(self.entry,(0,0),(1,1),wx.EXPAND)

        button = wx.Button(self,-1,label="Click me !")
        button.SetBackgroundColour(wx.BLUE)
        sizer.Add(button, (0,1))

        self.label = wx.StaticText(self,-1,label=u'Hello !')
        self.label.SetBackgroundColour(wx.BLUE)
        self.label.SetForegroundColour(wx.WHITE)
        sizer.Add( self.label, (1,0),(1,2), wx.EXPAND )

        self.SetSizerAndFit(sizer)
        self.Show(True)

if __name__ == "__main__":
    app = wx.App()
    frame = simpleapp_wx(None,-1,'my application')
    app.MainLoop()

Mes versions installées :
python : 2.5-2ubuntu2
wx : 2.6.3.2.1.5ubuntu0.1

Merci !

Hors ligne

#2 Le 07/02/2007, à 15:08

aleph

Re : [Python] label.SetBackgroundColour

Réponse en trois temps

1) J'ai souvenance que ce problème ait été mentionné (et résolu). C'est quelque part pas là http://lists.wxwidgets.org/
La version actuelle de wxPython est 2.8.0.x, donc ta version 2.6.x est en souffrance et ne sera jamais corrigée.

2) > Voici le code complet (je suis sur le tutoriel de SebSauvage) :

A voir le code proposé, j'ai bien peur que ce tutoriel, que je ne connais pas, soit plus qu'obsolète.
Pour un apprentissage, le mieux est certainement de consulté la démo (tous les widgets y sont démontrés) et aussi le wiki. voir http://wxpython.org/

3) En attendant, tu peux toujours étudier ceci. (A noter particulièrment, le redimensionnement de la fenêtre). Ecrit sous Windows mais doit fonctionner parfaitement sous Ubuntu.

# -*- coding: iso-8859-1 -*-

import wx

class MyPanel(wx.Panel):
    
    def __init__(self, parent, id):
        wx.Panel.__init__(self, parent, id, wx.DefaultPosition, wx.DefaultSize)
        self.parent = parent

        #les widgets
        self.entry = wx.TextCtrl(self, wx.ID_ANY, u"Enter text here.")
        button = wx.Button(self, wx.ID_ANY, "Click me !")
        button.SetBackgroundColour(wx.GREEN)
        self.label = wx.StaticText(self, wx.ID_ANY, u'Hello !')
        self.label.SetBackgroundColour(wx.BLUE)
        self.label.SetForegroundColour(wx.WHITE)

        button.SetFocus()

        #le sizer
        vgap = hgap = 10
        sizer = wx.GridBagSizer(vgap, hgap)

        sizer.Add(self.entry,(0, 0), (1, 1), wx.EXPAND)
        sizer.Add(button, (0, 1), (1, 1))
        sizer.Add( self.label, (1, 0), (1, 2), wx.EXPAND)
        sizer.AddGrowableRow(0)
        sizer.AddGrowableRow(1)
        sizer.AddGrowableCol(0)

        #taille et propagation au wx.Frame
        self.SetSizerAndFit(sizer)
        self.parent.SetClientSize(sizer.GetSize())

class MyFrame(wx.Frame):

    def __init__(self, parent, id):
        wx.Frame.__init__(self, parent, id, 'my application', wx.DefaultPosition, \
            wx.DefaultSize, wx.DEFAULT_FRAME_STYLE)
        self.CentreOnScreen()
        
        self.panel = MyPanel(self, wx.NewId())

        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)

    def OnCloseWindow(self, event):
        self.Destroy()

class MyApp(wx.App):
    
    def OnInit(self):
        frame = MyFrame(None, wx.ID_ANY)
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

def main():
    app = MyApp(False)
    app.MainLoop()

if __name__ == "__main__":
    main()

#eof

#3 Le 07/02/2007, à 15:13

aleph

Re : [Python] label.SetBackgroundColour

Aïe, aïe, aïe, errata
certainement de consulté la démo => ...certainement de consulter la démo...
particulièrment => particulièrement

#4 Le 08/02/2007, à 12:02

Gari

Re : [Python] label.SetBackgroundColour

Merci, je vais regarder ça.

Hors ligne

#5 Le 18/02/2007, à 23:26

francoisa

Re : [Python] label.SetBackgroundColour

L'adresse mentionnée par Sebastien Sauvage est celle-ci :
http://sebsauvage.net/python/gui/index_fr.html

Elle n'est pas obsolète puisque publiée en septembre 2006.
De plus la version de wxpython mentionnée est celle dispo sur Edgy.

Enfin, ni son script, ni celui donné ne fournit la couleur sur le texte.
Par contre, le bouton est bien vert, alors que le texte n'a pas de fond bleu.

Mais le problème reste posé.
Et je voudrais aussi bien en savoir plus sur les raisons de ce manque.

Si vous avez des pistes de recherches...

Dernière modification par francoisa (Le 18/02/2007, à 23:50)


Comment promouvoir l'informatique dans nos écoles ?
AbulEdu, solution logicielle libre http://www.abuledu.org
AbulEdu-fr, association des utilisateurs d'AbulÉdu http://abuledu-fr.org

Hors ligne

#6 Le 19/02/2007, à 09:36

aleph

Re : [Python] label.SetBackgroundColour

> francoisa
...
Mais le problème reste posé.
...
Si vous avez des pistes de recherches...

---

Il n'y a pas de problème. Deux remarques.

1) Le code proposé par S. S. n'est pas du très bon code wxPython. Le code que j'ai proposé est meilleur et correspond à ce qui se fait (et doit se faire) en wxPython et ceci depuis bien avant 2006.

2) Le problème de la couleur de fond du widget wxStaticText apparu dans une des versions de la série wxPython 2.6.x a été mentionné sur le forum des développeurs de wxPython. A ma connaissance, il a été corrigé puisque je n'ai plus vu mention de ce problème plus tard.

Aujourd'hui, la version de wxPython est la 2.8.1.1 (en non 2.8.0.x, comme je l'ai dit par erreur dans un message précédant).

La version 2.8.1.1 est la version de travail actuelle pour tout développement futur. Aucune des versions de la série wxPython 2.6.x ou wxPython 2.7.x ne sera corrigée. Ainsi va le développement de wxPython.

Si les dernières versions de wxPython ne sont pas disponibles dans les dépôts "officiels", veuillez contacter les mainteneurs de dépôts.

Une installation de wxPython 2.8.* est toutefois possible, voir http://wxpython.org/

#7 Le 19/02/2007, à 18:34

francoisa

Re : [Python] label.SetBackgroundColour

Merci beaucoup pour ces précisions. j'ai pu installer la dernière version empaquetée de wxpython avec les dépôts indiqués sur le site.

J'ai maintenant les versions suivantes :
python-wxversion (2.8.1.1-0)
python-wxgtk2.8 (2.8.1.1-0)
avec python 2.4


Mais ça ne marche toujours pas :
Pour le script de Sébastien, il est sensé prendre en compte la touche "Entrée" mais ça ne marche pas.
Par contre pour la seconde version donnée par "aleph", je crois comprendre qu'elle n'est pas codée.

Pour la couleur comme déjà mentionnée, elle apparaît bien pour le bouton dans les deux cas (aleph et sebsauvage) mais pas pour le label texte, dans les deux cas.

De plus le redimensionnement  de la fenêtre ne fonctionnait pas sur la version précédente de wxpython, alors que sur le script de sebsauvage, il fonctionne à moitié puisqu'on peut agrandir la fenêtre mais pas la rétrécir...

On avance, on avance...

Merci de votre aide.


Comment promouvoir l'informatique dans nos écoles ?
AbulEdu, solution logicielle libre http://www.abuledu.org
AbulEdu-fr, association des utilisateurs d'AbulÉdu http://abuledu-fr.org

Hors ligne

#8 Le 21/02/2007, à 09:05

aleph

Re : [Python] label.SetBackgroundColour

1) Je n'utilise pas de shebang car mon script est développé sous win.

2) Ma version avec mes sizers devrait être ok sous Ubuntu. L'utilisation des sizers est conforme aux exemples disponibles ici :  LearnSizers5.zip, http://spinecho.ifrance.com/

3) Couleur de l'arrière plan des wxStaticText. Trouvé sur le forum des développeurs wxPython.
Voir http://lists.wxwidgets.org/archive/wx-users/msg53930.html

Je crois que c'est toujours le cas.