StatusBar Hintergrundfarbe ändern

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
stasikz
User
Beiträge: 18
Registriert: Donnerstag 5. Juli 2007, 21:34

Donnerstag 17. Januar 2008, 23:16

Hallo Leute!

hab versucht die Hintergrundfarbe von StatusBar in meinem Programm zu ändern, doch das geht nicht :(
Hab das so gemacht:

Code: Alles auswählen

self.statusbar.SetBackgroundColour('RED')
self.statusbar.Refresh()
hab dann so versucht:

Code: Alles auswählen

self.statusbar.SetBackgroundColour('RED')
self.statusbar.ClearBackground()
es geht zwar, doch dann wird der Text in der Statusbar nicht mehr sichtbar

kann es sein, dass das nur unter Linux geht?

Beispiel: hier (dort auf "Error handling without dialogs" klicken)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Freitag 18. Januar 2008, 00:18

SetStatusText scheint nicht auf die Hintergrundfarbe zu reagieren. Wenn Du stattdessen einen StaticText verwendest, funktioniert es (Windows XP):

Code: Alles auswählen

import  wx

class CustomStatusBar(wx.StatusBar):
    def __init__(self, parent):
        wx.StatusBar.__init__(self, parent, -1)
        self.SetFieldsCount(3)
        self.SetStatusWidths([-2, -1, -2])
        cb = wx.StaticText(self, -1, 'Eins')
        self.Reposition(cb, 0)
        cb = wx.StaticText(self, -1, 'Zwei')
        self.Reposition(cb, 1)
        cb = wx.StaticText(self, -1, 'Drei')
        self.Reposition(cb, 2)
        self.SetBackgroundColour('RED')

    def Reposition(self, cb, field):
        rect = self.GetFieldRect(field)
        cb.SetPosition((rect.x, rect.y))
        cb.SetSize((rect.width, rect.height))
 
class TestCustomStatusBar(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, 'Test Custom StatusBar')
        self.sb = CustomStatusBar(self)
        self.SetStatusBar(self.sb)
        tc = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY|wx.TE_MULTILINE)
        self.SetSize((640, 480))
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)

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

if __name__ == '__main__':
    app = wx.PySimpleApp()
    win = TestCustomStatusBar(None)
    win.Show()
    app.MainLoop()
MfG
HWK
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Montag 17. März 2008, 22:00

Hi,
schick, die bunte Statusbar, kann ich gut gebrauchen! Hab ein bischen was dazu gebastelt, um den Text zur Laufzeit bequem ändern zu können.

Code: Alles auswählen

import  wx 

class CustomStatusBar(wx.StatusBar): 
    def __init__(self, parent): 
        wx.StatusBar.__init__(self, parent, -1) 
        self.SetFieldsCount(4) 
        self.SetStatusWidths([-2, -2, -2,-2]) 
        self.SetBackgroundColour(wx.Colour(255,215,50)) 
    
    def status_text(self, txt, field):
        self.Reposition(wx.StaticText(self, -1, txt), field) 

    def Reposition(self, cb, field): 
        rect = self.GetFieldRect(field) 
        cb.SetPosition((rect.x, rect.y)) 
        cb.SetSize((rect.width, rect.height)) 
  
  
class TestCustomStatusBar(wx.Frame): 
    def __init__(self, parent): 
        wx.Frame.__init__(self, parent, -1, 'Test Custom StatusBar') 
        self.sb = CustomStatusBar(self) 
        self.SetStatusBar(self.sb)
        self.SetSize((640, 480)) 
        tc = wx.TextCtrl(self, -1, "", style=wx.TE_READONLY|wx.TE_MULTILINE) 
        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow) 

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


if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    win = TestCustomStatusBar(None) 
    win.Show()     
    #--------------- Statusbartext aendern --------------
    win.sb.status_text(' och',0)                      
    win.sb.status_text(' nee!',1)                    
    win.sb.status_text(' der  schon',2)            
    win.sb.status_text(' wieder',3) 
    win.sb.Update()
    
    app.MainLoop()
Gruß,
Seven
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

Dienstag 18. März 2008, 09:30

Ich erinnere mich, dass Andrea Gavana eine Customstatusbar geschrieben hat. Moment:
here it is: http://xoomer.alice.it/infinity77/main/freeware.html
EnhancedStatusbar. Mit dieser Klasse sollte es möglich sein.
Antworten