Hintergrundfarbe eines SplitterWindow

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Dienstag 29. Januar 2008, 18:47

Hallo,

wahrscheinlich habe ich nur einen "Tomaten-vor-den-Augen" Anfall. Ich bekomme die Hintergrundfarbe des unteren Fensters nicht hin. Die ist immer schwarz.

Das ganze soll im unteren Fenster mal ein Weg-Zeit-Diagramm werden. Kommt also noch ne ganze Menge dazu.

Code: Alles auswählen

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

import wx
wx.SetDefaultPyEncoding("iso-8859-15")

class MainFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, 'Weg-Zeit-Diagramm', size=(900, 700))
        self.spWindow = wx.SplitterWindow(self)
        self.top_w = wx.Panel(self.spWindow, -1, style=wx.SIMPLE_BORDER)
        self.bottom_w = wx.ScrolledWindow(self.spWindow, -1, style=wx.SIMPLE_BORDER)
        self.bottom_w.SetScrollbars(1, 1, 1000, 1200)
        self.bottom_w.SetBackgroundColour(wx.WHITE)
        self.spWindow.Initialize(self.top_w)
        self.spWindow.Initialize(self.bottom_w)
        self.spWindow.SetMinimumPaneSize(10)
        self.spWindow.SplitHorizontally(self.top_w, self.bottom_w, 120)

    def startGrafic(self):
        self.bottom_w.Bind(wx.EVT_PAINT, self.initGrafic)
        
    def initGrafic(self, event=None):
        dc = wx.BufferedPaintDC(self.bottom_w)
        TimeRoster(dc)
        
    def close(self, event=None):
        self.Destroy()
        
class TimeRoster:
    def __init__(self, dc, scalefactor=1):
        self.dc = dc
        self.setHorizontalLines()
        
    def setHorizontalLines(self):
        startLine_y = 200
        startLine_x = 50
        endLine_x = 800
        for idx in range(25):
            y = startLine_y + 50 * idx
            self.dc.DrawLine(startLine_x, y, endLine_x, y)

def main():
    app = wx.PySimpleApp()
    frame = MainFrame(None)
    frame.Show()
    frame.startGrafic()
    app.MainLoop()

if __name__ == '__main__':
    main()
Mawilo
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 29. Januar 2008, 19:34

Hallo Mawilo!

Du kannst/musst noch ein Panel in das ScrolledWindow legen. Dieses kannst du einfärben. Aber ich habe deinen Code jetzt nicht getestet.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Mittwoch 30. Januar 2008, 18:06

Hallo Gerold,

ich habe es mit einem Panel probiert, ging aber leider nicht. Ich musste statt wx.BufferedPaintDC nur wx.PaintDC verwenden - und schon geht es. :?
Hoffentlich habe ich dann später keine Nachteile, wenn die ganzen grafischen Elemente laufend neu gezeichnet werden sollen.
Laut dem Buch kann ich aber ein wx.ScrolledWindow statt eines Panels verwenden.
You can use a wx.ScrolledWindow any place that you would use a wx.Panel...
Es sollte also auch ohne zusätzliches Panel funktionieren.

Grüße
Mawilo
Antworten