Seite 1 von 1

scrolled panel

Verfasst: Donnerstag 23. November 2006, 11:38
von CM
Hallo,

Ich möchte gerne dem Nutzer etwas Text in einem scrolled panel anbieten, aber meine bisherige Variante produziert nur am linken Rand des Fensters etwas Text und der Rest ist einfach grau. Weiß jemand wo der Fehler steckt?

Code: Alles auswählen

import wx.lib.scrolledpanel 

class SScrolledPanel(wx.lib.scrolledpanel.ScrolledPanel):
    """
        dummy class serving VersionHistoryWindow
    """
    def __init__(self, parent, frame, text):
        scrolled = wx.lib.scrolledpanel.ScrolledPanel.__init__(self, parent, -1)
    
        panel = wx.lib.scrolledpanel.ScrolledPanel(self, -1, size=wx.DefaultSize, style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER )
        sizer = wx.FlexGridSizer(cols=3, vgap=4, hgap=4)
        for line in text.split('\t'):
            sizer.Add(wx.StaticText(self, -1, line))
        panel.SetSizer(sizer)
        panel.SetAutoLayout(1)
        panel.SetupScrolling(1)

class VersionHistoryWindow(wx.Frame):
    """
        scrolled panel in order to show the version history
    """
    def __init__(self, parent, id, titel, text, pos=wx.DefaultPosition,
                            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
        wx.Frame.__init__(self, parent, id, titel, pos, size, style)
        panel = SScrolledPanel(self, parent, text)

        border=wx.BoxSizer(wx.VERTICAL)
        border.Add(panel,-1, wx.FIXED_MINSIZE)
        border.Fit(self)
        self.SetSizer(border)
        self.Layout()
        self.Fit()

class SAXS_wx(wx.Frame):
...
    def OnHistory(self, event=None):
        """
            opens a little dialog to present the user the version history
        """
        win = VersionHistoryWindow(self, -1, "Version History", text = __revision__)
        win.Show(True)

class SAXSApp(wx.App):
    def OnInit(self):
        frame = SAXS_wx(None,-1,"SAXS Analysis")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True
Gruß,
Christian

Verfasst: Donnerstag 23. November 2006, 21:39
von HWK
SScrolledPanel.__init__() ist völlig verkehrt. Es müsste z.B. so aussehen:

Code: Alles auswählen

    def __init__(self, parent, text):
        wx.lib.scrolledpanel.ScrolledPanel.__init__(self, parent, -1)
        sizer = wx.FlexGridSizer(cols=3, vgap=4, hgap=4)
        for line in text.split('\t'):
            sizer.Add(wx.StaticText(self, -1, line))
        sizer.Fit(self)
        self.SetSizer(sizer)
        self.SetAutoLayout(1)
        self.SetupScrolling(1)
Was die Zeilen 28 bis 33 sollen, verstehe ich nicht ganz. Wozu brauchst Du denn einen BoxSizer, wenn er sowieso nur ein Element enthält. Kommentier die Zeilen einmal aus! Verhält es sich dann so, wie Du Dir es vorstellst?
Wenn Du den BoxSizer behalten willst, musst Du die Größe des ScrolledPanels anpassen: Vor Zeile 15 sizer.Fit(self) eingeben.
Zeile 48 und die Kombination Zeile 30 und 33 dürften unnötig sein.
MfG
HWK

Verfasst: Freitag 24. November 2006, 09:48
von CM
Hoi HWK,

vielen Dank. Inzwischen klappt es.
Zu Deiner Kritik: Na ja, das habe ich natürlich aus einer größeren Applikation - die ansonsten reibungslos funktioniert - herauskopiert und hier fürs Forum angepasst. Du hast recht, den BoxSizer hätte ich auch weglassen können, aber mein Frame hat schon noch zwei Elemente mehr drin und ich habe den Code nicht ausreichend eingedampft.

Dankeschön,
Christian