2010-08-12 2 views
0

Мне не нужно было какое-либо программирование графического интерфейса в течение длительного времени, поэтому я мог бы быть тупым здесь, поэтому, пожалуйста, несите меня, если это глупый вопрос. Я решил использовать wxPython для небольшого проекта для хобби, и у меня возникли проблемы с изменением цвета фона в главном окне. Я использую Python 2.6.2 и wxPython 2.8.11.0 на Snow Leopard. Может ли кто-нибудь сказать мне, что я здесь делаю неправильно? Или я наткнулся на какую-то ошибку? Вот небольшой пример, демонстрирующий проблему ...wxPython SetBackgroundColour не работает на 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 Вопросы с меткой wxpython, 1 (ваш) с тегами wx-python, может быть хорошей идеей изменить это – volting

+0

Ха-ха, хорошее место. Приветствия. –

ответ

1

Помнить с WxPython является то, что по большей части, она оборачивает родные виджеты платформы он включен. Поэтому, если фрейм на Linux не поддерживает изменение цвета фона, то вы не можете сделать это только с фреймом. (Примечание: я не знаю, какие платформы wx.Frame поддерживает изменение цвета bg)

Wx.Panel всегда должен быть включен для последовательного внешнего вида, а также для правильного использования табуляции для дочерних виджетов. Если вы хотите полностью контролировать все аспекты вашего приложения, вам нужно будет использовать другой инструментарий. Кстати, многие из основных элементов управления в wxPython имеют общие копии, написанные на чистом питоне, и их можно взломать, чтобы делать вещи, которые не могут быть у собственных виджетов.

1

Ваш призыв к self.SetBackgroundStyle(BG_STYLE_CUSTOM), кажется, вызывает проблемы в моей системе, а также вам не нужна строка для self.cdatabase = ColourDatabase() вообще в моих тестах. Этот код работает на моей стороне вещей:

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

«BG_STYLE_CUSTOM» был тем, что я пытался, когда очевидный подход не сработал. Я просто удалил его и попробовал, он все равно не работает. Тем не менее, он работает, если я добавлю панель, которая заполняет рамку и делает черный фон панели. Странно ... –

+0

@Chinmay Kanchi - Необходимость в панели может быть специфичной для платформы. Я на XP 64-бит. Я помню, как я читал в разных местах, что вам нужна панель для согласованности между платформами, поэтому, возможно, это объясняет некоторые несоответствия. –

+0

Достаточно справедливо. Ах, радости кросс-платформенных инструментов ... –

Смежные вопросы