2010-08-12 9 views
0

Je n'ai pas eu à faire de programmation graphique depuis longtemps, donc je suis peut-être obtus ici, alors s'il vous plaît, gardez-moi si c'est une question stupide. J'ai décidé d'utiliser wxPython pour un petit projet hobby, et j'ai du mal à changer la couleur de fond de la fenêtre principale. J'utilise Python 2.6.2 et wxPython 2.8.11.0 sur Snow Leopard. Quelqu'un peut-il me dire ce que je fais mal ici? Ou est-ce que je suis tombé sur un bug quelconque? Voici un petit exemple qui illustre le problème ...wxPython SetBackgroundColour ne fonctionne pas sur OS X

from wx import * 

class MainFrame(Frame): 
    def __init__(self, parent, title): 
     Frame.__init__(self, parent, title=title) 

     self.Maximize() 
     self.cdatabase = ColourDatabase() 
     self.SetBackgroundStyle(BG_STYLE_CUSTOM) 
     self.SetOwnBackgroundColour(self.cdatabase.Find('BLACK')) 
     self.Show(True) 
     self.ClearBackground() 


app = App(False) 
frame = MainFrame(None, 'a title') 
app.MainLoop() 
+1

615 Questions taguées wxpython, 1 (vôtre) tagged wx-python, pourrait être une bonne idée de changer cela – volting

+0

Haha, bon endroit. À votre santé. –

Répondre

1

La chose à retenir avec wxPython est que pour la plupart, il enveloppe les widgets natifs de la plate-forme est en marche. Donc, si le cadre sur Linux ne supporte pas de changer sa couleur de fond, vous ne pouvez pas le faire avec juste le cadre. (Remarque: je ne sais pas quelles plates-formes wx.Frame prend en charge le changement de couleur bg)

Le wx.Panel doit toujours être inclus pour un aspect cohérent et pour que les onglets fonctionnent correctement sur les widgets enfants. Si vous voulez pouvoir contrôler complètement chaque aspect de votre application, vous devrez utiliser une boîte à outils différente. En passant, de nombreux contrôles de base dans wxPython ont des homologues génériques qui ont été écrits en python pur et peuvent être piratés pour faire des choses que les widgets natifs ne peuvent pas faire.

1

Votre appel à self.SetBackgroundStyle(BG_STYLE_CUSTOM) semble causer des problèmes sur mon système, et vous n'avez pas besoin de la ligne pour self.cdatabase = ColourDatabase() du tout dans mes tests. Ce code fonctionne sur mon côté des choses:

from wx import * 

class MainFrame(Frame): 
    def __init__(self, parent, title): 
     Frame.__init__(self, parent, title=title) 
     self.Maximize() 
     self.SetOwnBackgroundColour('Black') 
     self.Show(True) 


app = App(False) 
frame = MainFrame(None, 'a title') 
app.MainLoop() 
+0

Le 'BG_STYLE_CUSTOM' était quelque chose que j'ai essayé quand l'approche évidente n'a pas fonctionné. Je viens juste de l'enlever et de l'essayer, ça ne marche toujours pas. Cela fonctionne cependant si j'ajoute un panneau qui remplit le cadre et rend le fond du panneau noir. Étrange ... –

+0

@Chinmay Kanchi - Le besoin d'un panneau peut être spécifique à la plate-forme. Je suis sur XP 64 bits. Je me souviens d'avoir lu à différents endroits que vous aviez besoin d'un panel pour assurer la cohérence entre les plateformes, alors peut-être que cela explique une partie de la divergence. –

+0

Assez juste. Ah les joies des boîtes à outils multiplateformes ... –

Questions connexes