Sizer in einem NotebookTab

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Hi, ich hab die Beispiele und die Suche bemüht, aber nichts gefunden (ausser dem Hinweis auf die DPI-Einstellung bei Labtops :) )

Wie kann ich dem Inhalt eines Notebook-Tabs sagen, dass es sich der Fenstergröße anpassen soll? Das Notebook selber resizt wunderbar, nur der Inhalt bleibt statisch. Hab ich da was übersehen?

Danke schonmal, ich hofffe mir kann jemand helfen...

Code: Alles auswählen

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

import wx
import wx.grid

class MyFrame(wx.Frame):
    
    def __init__(self, title, pos, size, style):
                
        wx.Frame.__init__(self, None, -1, title, pos, size, style)
        
        self.PnlFrame = wx.Panel(self, -1)
        BxsFrame = wx.BoxSizer(wx.VERTICAL)
        
        self.__init__NbMain()
        BxsFrame.Add(self.NbMain,1, flag=wx.EXPAND)
         
        self.PnlFrame.SetSizer(BxsFrame)
        
        BxsFrame.Fit(self)


    def __init__NbMain(self):
        
        self.NbMain = wx.Notebook(self.PnlFrame, -1, style=wx.NB_NOPAGETHEME)
        
        self.PnlMain = self.__init__PnlMain()
        self.NbMain.AddPage(self.PnlMain, 'Allgemein')
                
        self.NbMain.Fit()
        
    def __init__PnlMain(self):
        
        Pnl = wx.Panel(self.NbMain, -1)
        
        Gbs = wx.GridBagSizer(0,0)
    
        BxsAlpha = wx.BoxSizer(wx.HORIZONTAL)
        LblAlpha = wx.StaticText(Pnl, -1, 'Alpha:')
        self.TxtAlpha = wx.TextCtrl(Pnl, -1)
        BxsAlpha.Add(LblAlpha, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsAlpha.Add(self.TxtAlpha, 0, flag=wx.ALIGN_CENTER)
        Gbs.Add(BxsAlpha,(0,0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)
        
        
        BxsBeta = wx.BoxSizer(wx.HORIZONTAL)
        LblBeta = wx.StaticText(Pnl, -1, 'Beta:')
        self.ChcBeta = wx.Choice(Pnl, -1, choices=['eins','zwei','drei'])
        BxsBeta.Add(LblBeta, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsBeta.Add(self.ChcBeta, 0, flag=wx.ALIGN_CENTER)
        Gbs.Add(BxsBeta,(0,1), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)               
        
        self.GrdEpsilon = wx.grid.Grid(Pnl, -1)
        self.GrdEpsilon.CreateGrid(5,5)
        for i in range(5):
            self.GrdEpsilon.SetColLabelValue(i, str(i))
        Gbs.Add(self.GrdEpsilon, (1,0), (1,2), flag=wx.EXPAND|wx.ALL, border=5)
        
        
        Pnl.SetSizer(Gbs)
        Gbs.Fit(Pnl)
        return Pnl   
        
        
class MyApp(wx.App):

    
    def __init__(self, redirect=False):
        
        wx.App.__init__(self, redirect)
             
    def OnInit(self):
        
        self.Frame = MyFrame('Notebook Test', wx.DefaultPosition, wx.DefaultSize, wx.DEFAULT_FRAME_STYLE)
        self.Frame.Show()
        self.SetTopWindow(self.Frame)
        return True

if __name__ == '__main__':
    app = MyApp()
    app.MainLoop()
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das Problem scheint der GridBagSizer zu sein. Wenn Du diesen durch einen GridSizer ersetzt, funktioniert es, sieht aber nicht schön aus:

Code: Alles auswählen

    def __init__PnlMain(self):
       
        Pnl = wx.Panel(self.NbMain, -1)
       
        #Gbs = wx.GridBagSizer(0, 0)
        Gbs = wx.GridSizer(2, 2)
   
        BxsAlpha = wx.BoxSizer(wx.HORIZONTAL)
        LblAlpha = wx.StaticText(Pnl, -1, 'Alpha:')
        self.TxtAlpha = wx.TextCtrl(Pnl, -1)
        BxsAlpha.Add(LblAlpha, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsAlpha.Add(self.TxtAlpha, 0, flag=wx.ALIGN_CENTER)
        #Gbs.Add(BxsAlpha,(0, 0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)
        Gbs.Add(BxsAlpha, flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)
       
       
        BxsBeta = wx.BoxSizer(wx.HORIZONTAL)
        LblBeta = wx.StaticText(Pnl, -1, 'Beta:')
        self.ChcBeta = wx.Choice(Pnl, -1, choices=['eins','zwei','drei'])
        BxsBeta.Add(LblBeta, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsBeta.Add(self.ChcBeta, 0, flag=wx.ALIGN_CENTER)
        #Gbs.Add(BxsBeta,(0, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)               
        Gbs.Add(BxsBeta,flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)               
       
        self.GrdEpsilon = wx.grid.Grid(Pnl, -1)
        self.GrdEpsilon.CreateGrid(5, 5)
        for i in range(5):
            self.GrdEpsilon.SetColLabelValue(i, str(i))
        #Gbs.Add(self.GrdEpsilon, (1, 0), (1, 2), flag=wx.EXPAND|wx.ALL, border=5)
        Gbs.Add(self.GrdEpsilon, flag=wx.EXPAND|wx.ALL, border=5)
       
        Pnl.SetSizer(Gbs)
        Gbs.Fit(Pnl)
        return Pnl   
Aber muß das Resizen des Grids denn unbedingt sein?

MfG
HWK
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Es geht doch mit einem GridBagSizer:

Code: Alles auswählen

    def __init__PnlMain(self):       
        Pnl = wx.Panel(self.NbMain, -1)
       
        Gbs = wx.GridBagSizer(0, 0)
   
        BxsAlpha = wx.BoxSizer(wx.HORIZONTAL)
        LblAlpha = wx.StaticText(Pnl, -1, 'Alpha:')
        self.TxtAlpha = wx.TextCtrl(Pnl, -1)
        BxsAlpha.Add(LblAlpha, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsAlpha.Add(self.TxtAlpha, 0, flag=wx.ALIGN_CENTER)
        Gbs.Add(BxsAlpha,(0, 0), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)
       
       
        BxsBeta = wx.BoxSizer(wx.HORIZONTAL)
        LblBeta = wx.StaticText(Pnl, -1, 'Beta:')
        self.ChcBeta = wx.Choice(Pnl, -1, choices=['eins','zwei','drei'])
        BxsBeta.Add(LblBeta, 0, flag=wx.ALIGN_CENTER|wx.RIGHT, border=5)
        BxsBeta.Add(self.ChcBeta, 0, flag=wx.ALIGN_CENTER)
        Gbs.Add(BxsBeta,(0, 1), flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL, border=5)               
       
        self.GrdEpsilon = wx.grid.Grid(Pnl, -1)
        self.GrdEpsilon.CreateGrid(5,5)
        for i in range(5):
            self.GrdEpsilon.SetColLabelValue(i, str(i))
        Gbs.Add(self.GrdEpsilon, (1, 0), (1, 2), flag=wx.EXPAND|wx.ALL, border=5)
        Gbs.AddGrowableCol(0, 1) # <--
        Gbs.AddGrowableCol(1, 1) # <--
        Gbs.AddGrowableRow(0, 1) # <--
        Gbs.AddGrowableRow(1, 1) # <--
        Gbs.AddGrowableRow(2, 1) # <--
       
       
        Pnl.SetSizer(Gbs)
        Gbs.Fit(Pnl)
        return Pnl
Es sieht aber trotzdem nicht besser aus.

MfG
HWK
Antworten