0

Pythonでコードを書きました。

#!/usr/bin/python2
import wx
import wx.grid


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Manager")
        sizer = wx.GridBagSizer(hgap=0, vgap=0)

        overall = wx.grid.Grid(self)
        overall.CreateGrid(5,2)
        sizer.Add(overall, pos=(0,0), span=(5,2), flag=wx.EXPAND)

        self.SetSizer(sizer)
        self.Fit()

app = wx.PySimpleApp()
MainFrame().Show()

app.MainLoop()

5x2グリッドが表示されます。しかし、私が変更した場合:

sizer.Add(overall, pos=(0,0), span=(5,2), flag=wx.EXPAND)

の中へ:

sizer.Add(overall, pos=(0,0), span=(4,2), flag=wx.EXPAND)

何も変更されません:(
しかし、4x2のスペースとスクロールバーを備えたGridBagSizerに5x2のグリッドを配置したいと思います。

どうやってするの???

4

1 に答える 1

0

GridBagSizerは、ラベルとテキストコントロールのペアを持つフォームがある場合など、実際に複数のウィジェットをグリッドのような形にするためのものです。ほとんどの場合、1つのウィジェットだけではありません。

BoxSizerを使用する必要があります。とにかく柔軟性があります。また、wx.PySimpleAppは非推奨になりました。代わりにwx.App(False)を使用してください。動作するコードは次のとおりです。

import wx
import wx.grid


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, "Manager")
        sizer = wx.BoxSizer(wx.VERTICAL)

        overall = wx.grid.Grid(self)
        overall.CreateGrid(5,2)
        sizer.Add(overall, 0, flag=wx.EXPAND)

        self.SetSizer(sizer)
        self.Fit()

app = wx.App(False)
MainFrame().Show()

app.MainLoop()

編集(7/16/12):あなたの説明によりよく一致する別の例があります:

import wx

########################################################################
class ChartPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

########################################################################
class MainPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)
        chart = ChartPanel(self)
        chart.SetBackgroundColour("blue")

        # create some sizers
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        topSizer = wx.BoxSizer(wx.HORIZONTAL)
        # change to VERTICAL if the buttons need to be stacked
        btnSizer = wx.BoxSizer(wx.HORIZONTAL)

        for i in range(3):
            btn = wx.Button(self, label="Button #%s" % (i+1))
            btnSizer.Add(btn, 0, wx.ALL, 5)

        # put the buttons next to the Panel on the top
        topSizer.Add(btnSizer, 0, wx.ALL, 5)
        topSizer.Add(chart, 1, wx.EXPAND)

        mainSizer.Add(topSizer, 1, wx.EXPAND)
        mainSizer.AddSpacer(150,150)
        self.SetSizer(mainSizer)

########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="BoxSizer Example")
        panel = MainPanel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()
于 2012-07-13T13:21:42.167 に答える