Problem mit StaticBoxSizer und TreeCtrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
bonaire
User
Beiträge: 13
Registriert: Mittwoch 27. August 2008, 12:27
Wohnort: Karlsruhe

Mittwoch 27. August 2008, 12:51

Hallo,


ich bin neu im Geschäft mit Python und wxPython und komme an dieser Stelle einfach nicht weiter.

Der folgende Code baut ein mit einem vertikalen Splitter versehenes Fenster. Im linken Teil des Splitters befindet sich ein wx.StaticBoxSizer, der sich auch wunderbar an die Größe des Splitters anpasst.
In den StaticBoxSizer soll wiederum eine Instanz von wx.TreeCtrl hinein. Mein Problem ist nun, dass ich es nicht schaffe, diese Instanz sowohl in x als auch in y Richtung an dem StaticBoxSizer auszurichten. Je nach Einstellung schaffe ich es nur, dass die wx.TreeCtrl-Instanz nur in y Richtung mitwächst oder sich x und y proportional verhalten. Das kann ich aber leider beides nicht gebrauchen.

Was mache ich da falsch oder habe ich etwas vergessen? Die Sizer haben es ganz schön in sich :wink:

cu

Code: Alles auswählen

#!/usr/bin/env python

import wx
import os

class myAppFrame(wx.Frame):
    def __init__(self, parent):
        self.title = "Template-Designer"
        wx.Frame.__init__(self, parent, -1, self.title, size=(800,600))
        self.widgets()

    def widgets(self):
        self.mainPanel = wx.Panel(self)
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.mainSplitter = wx.SplitterWindow(self.mainPanel)

        self.mainPanel.SetSizer(self.mainSizer)
        self.mainSizer.Add(self.mainSplitter, 1, wx.EXPAND)

        self.templatePanel = wx.Panel(self.mainSplitter)
        self.propertyPanel = wx.Panel(self.mainSplitter)
        self.mainSplitter.SplitVertically(self.templatePanel, self.propertyPanel)
        self.mainSplitter.SetSashPosition(250)

        self.templateGroupBox = wx.StaticBox(self.templatePanel, -1, "Templates")
        self.templateFrameBox = wx.StaticBoxSizer(self.templateGroupBox, wx.EXPAND)

        #Interna of Template GroupBox...
        self.templateButtonBox = wx.BoxSizer(wx.HORIZONTAL)
        self.templateTreeBox = wx.BoxSizer(wx.VERTICAL)

        self.templateFrameBox.Add(self.templateTreeBox, 1, wx.EXPAND)

        self.document = wx.TreeCtrl(self.templatePanel, -1)
        self.addItemButton = wx.Button(self.templatePanel, -1, "Add item")
        self.deleteItemButton = wx.Button(self.templatePanel, -1, "Delete item")

        self.templateTreeBox.Add(self.document, 1, wx.EXPAND)
        self.templateTreeBox.Add(self.templateButtonBox, 0, wx.EXPAND)

        self.templateButtonBox.Add(self.addItemButton, 1, wx.EXPAND)
        self.templateButtonBox.Add(self.deleteItemButton, 1, wx.EXPAND)

        #Final layout
        self.templatePanel.SetSizer(self.templateFrameBox)

        self.templateFrameBox.Fit(self.templatePanel)

        self.mainPanel.SetAutoLayout(True)
        self.templatePanel.SetAutoLayout(True)

        self.mainPanel.Layout()
        self.templatePanel.Layout()

class myApp(wx.App):

    def OnInit(self):
        frame = myAppFrame(None)
        frame.Center(True)
        frame.Show(True)
        frame.SetMinSize((600,400))
        self.SetTopWindow(frame)
        return True

if __name__ == '__main__':
    app = myApp(False)
    app.MainLoop() 
Antworten