Найти - Пользователи
Полная версия: проблема с назначением цвета кнопки в wxpython
Начало » Python для новичков » проблема с назначением цвета кнопки в wxpython
1
@cckyi_boxxx
import wx
app = wx.App()
frame = wx.Frame(None, -1, size=(100, 100))
frame.Show()
butt = wx.Button(frame , size = (60 , 60) , label = 'trololo')
butt.SetBackgroundColour((0,0,0))
butt.SetForegroundColour((255,0,0))
butt.Show()
app.MainLoop()

по непонятным мне причинам никак не могу выставить бэкгроунд на кнопку , если кто знает как это сделать подскажите плз
@cckyi_boxxx
люди так кто-нить знает ответ ?

ну или подскажите что лучше заюзать для создания кроссплатформенного (достаточно win и linux , макинтош если будет галить пох) , красивого (возможность управления цветом абсолютно всех элементов + возможность делать часть из них из изображений) и с возможностью сворачивания в трей (не только в Window List как у большинства софта) дабы софтина висела в трее и выдавала (хз как правильно называеться) информационные сообщения подобно центру безопасности на вендах , или alarm clock (при срабатывании) на линухе , заранее благодарю за ответы .
PooH
@cckyi_boxxx
люди так кто-нить знает ответ ?
У меня все работает, так что давайте смотреть версию wxPython и систему.
Правда код у вас странноват, обычно это выглядит примерно так
import wx
class MyFrame(wx.Frame):
    
    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)
        butt = wx.Button(self, label = 'trololo')
        butt.SetBackgroundColour((0,0,0))
        butt.SetForegroundColour((255,0,0))
app = wx.App()
frame = MyFrame(None, -1, size=(100, 100))
frame.Show()
app.MainLoop()
но к цветам кнопки это не относится. А вообще сейчас народ больше смотрит в сторону Qt - pyQt pySide
@cckyi_boxxx
PooH спасибо за ответ , что касаеться версии :
import wx , sys
print wx.__version__ , "\n" , sys.version
2.8.10.1 
2.6.5 (r265:79063, Apr 16 2010, 13:09:56) 
[GCC 4.4.3]
система linux back track


что-же касаеться кода соглашусь странноват но он был набросан дабы отразить суть проблемы - бэкгроунд кнопки не становился черным хотя c цветом текста такой проблемы не было , и выкладывать весь код проекта (на тот момент 130 строк если считать с коментами) я не видел .

но к цветам кнопки это не относится.
не понял вас , SetBackgroundColour и не должен сделать цвет фона кнопки черным ?

А вообще сейчас народ больше смотрит в сторону Qt - pyQt pySide
что-то мне подсказывает что это не спроста , но перед тем как переходить на него хотел-бы у вас уточнить не возникает-ли проблем с моими потребностями которые я описывал выше ? (имееться ввиду из-за технических сложностей а не моей безграмотности)
PooH
@cckyi_boxxx
что касаеться версии :
2.8.10.1
система linux back track
Странно, у меня та же версия wxPython, gtk 2.20.1, все работает. Может у вас какие-то специфические настройки темы в десктопе?
@cckyi_boxxx
не понял вас , SetBackgroundColour и не должен сделать цвет фона кнопки черным ?
я имел в виду, что несмотря на кривость приведенного кода, цвет кнопки должен меняться
@cckyi_boxxx
не возникает-ли проблем с моими потребностями которые я описывал выше ? (имееться ввиду из-за технических сложностей а не моей безграмотности)
Ну я писал более стандартные интерфейсы. Вообще, честно говоря, сейчас я бы взял Qt, в тот раз меня останавливала лицензия на PyQt под windows, а сейчас есть PySide.
@cckyi_boxxx
спасибо огромное за советы , благодаря им я сохранил уйму времени которая ушла-бы на то что-бы самому во всем разобраться , относительно wxPython вы попали в точку , он брал цвета для кнопки из сисиемной темы (на линухе) а на венде все заработало , в результате я его отбросил , сейчас разбираюсь с PyGTK , и опять попал в непонятную ситуацию :

вот код метода создающего кнопку
def cb(self):
        self.butt = gtk.Button(label = 'pzdc' )
        self.active.append(self.butt)
        self.states = [gtk.STATE_NORMAL , gtk.STATE_ACTIVE , gtk.STATE_PRELIGHT , gtk.STATE_SELECTED , gtk.STATE_INSENSITIVE]
        self.butt.connect("clicked" , self.simplealert , 'lol')
        self.butt.set_size_request(70 ,25)
        
        self.map = self.butt.get_colormap()
        self.but_bg = self.map.alloc_color("#1a1a1a") # state normal bg
        self.but_fg = self.map.alloc_color("#1e90ff") # state normal , active , highliht , selected fg 
        self.h_but_bg = self.map.alloc_color("#1f1f1f") # state highlight bg
        self.p_butt_bg = self.map.alloc_color("#2e2e2e") # state active , selected bg
        self.txt_fg = self.map.alloc_color("#1e90fe")
        
        self.style = self.butt.get_style().copy()
        self.style.bg[gtk.STATE_NORMAL] = self.but_bg
        self.style.bg[gtk.STATE_PRELIGHT] = self.h_but_bg
        self.style.bg[gtk.STATE_ACTIVE] = self.p_butt_bg
        
        for x in self.states :
            self.style.fg[x] = self.but_fg
            self.style.text[x] = self.txt_fg
        
        self.butt.set_style(self.style)
        self.butt.show()
        self.layout.put(self.butt , 0 , 0)

и здесь уже проблема не с цветом бэкгроунда а с цветом текста кнопки , согласно этой доке http://developer.gnome.org/pygtk/2.24/class-gtkstyle.html он должен был измениться но ничего не получаеться он как был черным так и остаеться
@cckyi_boxxx
##################### upd #########################
еще раз выражаю благодарность , проблему решил заюзав изображения , единственное если у кого-нить есть хорошая дока по работе с треем в PyGTK то был бы очень благодарен за нее


#####################upd##########################
все вопросы сняты , спс за внимание
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB