Seite 1 von 1

SplitterWindow reagiert nicht auf Event!

Verfasst: Samstag 2. Oktober 2010, 15:07
von Schaf220
Hallo liebe Community,
ich habe mal wieder ein Problem, was ich nicht gelöst bekomme.
Unten seht ihr meinen Code, es handelt sich hierbei um ein SplitterWindow sowie ein Panel links und ein Panel rechts. Soweit klappt auch alles, mein Ziel ist es, sobald sich die Größe des Frames ändert, das sich auch die Größe der Panel ändert bzw. die Position des Sash(Trennstrich) anpasst und in die Mitte gerückt wird. Ohne wx.EVT_SIZE funktioniert alles aber sobald ich es an das Frame binde, verkleinert sich die Größe von panel1. Was kann das sein? Habt ihr eine Idee?

MfG Schaf220

Code: Alles auswählen

#!/usr/bin/python

import wx

class SizeEvent(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)

        #self.Bind(wx.EVT_SIZE, self.OnSize) # Wenn diese Zeile auskommentiert wird, geht das Programm
                                             # Wenn nicht, ist das Fenster für Panel 1 ganz klein und bleibt auch so

        splitter = wx.SplitterWindow(self, -1, style = wx.SIMPLE_BORDER)
        
        self.panel1 = wx.Panel(splitter, -1)
        self.panel2 = wx.Panel(splitter, -1)
        self.panel1.SetBackgroundColour(wx.RED)
        
        splitter.SplitVertically(self.panel1, self.panel2, self.GetSize()[0]/2)
        
        self.Centre()
        self.Show(True)
        
    def OnSize(self, event):
        actSize = event.GetSize()
        xPos = int(actSize[0])
        yPos = int(actSize[1])
        #print yPos, type(yPos)
        self.panel1.SetSize(wx.Size(xPos/2,yPos)) # soll Groesse des Panels richten
        


app = wx.App()
SizeEvent(None, 1, 'sizeevent.py')
app.MainLoop()

Re: SplitterWindow reagiert nicht auf Event!

Verfasst: Samstag 2. Oktober 2010, 15:41
von ntrunk
Hi,
folgender Code tut, was du vermutlich möchtest:

Code: Alles auswählen

    def OnSize(self, event):
        self.splitter.SetSashPosition(event.GetSize()[0]/2)
        event.Skip()
Die Breiten der Panels werden vom SplitterWindow gemanagt. Deshalb kannst du die nicht direkt verändern und musst dem SplitterWindow sagen, welche Aufteilung du möchtest.

Ausserdem (hat jetzt nichts mit deinem Problem zu tun):
- bitte formatiere künftig deinen Code mit python-tags
- eine id musst du beim Erzeugen eines Widgets nur dann angeben, wenn sie vom Standardwert abweicht
- actSize ist überflüssig: width,height = event.GetSize()
- xPos und yPos sind keine gute Bezeichner für Breite und Höhe eines Fensters
- eine explizite Umwandlung von int nach int ist i.d.R. unnötig ;-)

Gruß
Norbert

Re: SplitterWindow reagiert nicht auf Event!

Verfasst: Samstag 2. Oktober 2010, 15:52
von Schaf220
Vielen Dank für deine Hilfe und deine Verbesserungsvorschläge!