Zusammenspiel von StaticBox und BoxSizer

Plattformunabhängige GUIs mit wxWidgets.
Antworten
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

Hallo,
das Anbringen mehrerer widgets, im Besonderen das Zusammenspiel von
StaticBox und BoxSizer macht mir graue Haare. Im folgenden sollten
auf einem weißen panel 2 static Boxen sein, mit je ein (paar) Textcontrols
DARIN. Das folgende geht aber leicht daneben:

Code: Alles auswählen

import wx
 
class MainWindow(wx.Frame):
 
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size = (300, 200),
            style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)

        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour("White")
        

        # box1
        self.box1 = wx.StaticBox(self.panel, -1, "Ctrl_1")
        self.box1.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD))
        self.box1.SetForegroundColour(wx.BLACK)
        self.box1_sizer = wx.StaticBoxSizer(self.box1)
        self.txtctrl1 = wx.TextCtrl(self, -1, "", size=(120, -1))
        self.box1_sizer.Add(self.txtctrl1, 1, 0, wx.CENTER, 0)  
        
        # box2
        self.box2 = wx.StaticBox(self.panel, -1, "Ctrl_23")
        self.box2.SetFont(wx.Font(9, wx.SWISS, wx.NORMAL, wx.BOLD))
        self.box2.SetForegroundColour(wx.BLACK)
        
        self.box2_sizer = wx.StaticBoxSizer(self.box2,wx.VERTICAL)
        self.txtctrl2 = wx.TextCtrl(self, -1, "", size=(300, -1))
        self.txtctrl3 = wx.TextCtrl(self, -1, "", size=(300, -1))

        self.box2_sizer.Add(self.txtctrl2, 1, 0, wx.CENTER, 0)
        self.box2_sizer.Add(self.txtctrl3, 1, 0, wx.CENTER, 0)
        
        
 
        # mainsizer
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        mainsizer.Add(self.box1_sizer, 0, wx.ALIGN_LEFT| wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        mainsizer.Add(self.box2_sizer, 0, wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
        
        self.SetSizer(mainsizer)
        mainsizer.Fit(self)
 
        self.Bind(wx.EVT_CLOSE, self.exitApp)
 
    def exitApp(self,event=None):
        self.Destroy()
 
if __name__ == '__main__':
    myapp = wx.App(redirect=False)
 
    myframe = MainWindow(None, 'test')
    myframe.Center()
    myframe.Show()
    myapp.MainLoop()
Ich würde gerne verstehen, was da falsch ist.
joh
ntrunk
User
Beiträge: 83
Registriert: Sonntag 7. September 2008, 23:09
Wohnort: Buchen (Odenwald)

Hi,
du solltest bei deinen Controls das Panel als parent angeben und den mainsizer für das Panel setzen.
Gruß
Norbert
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

ntrunk hat geschrieben:Hi,
du solltest bei deinen Controls das Panel als parent angeben und den mainsizer für das Panel setzen.
Gruß
Norbert
Das funzt.
DANKE!!
Antworten