2

wxpython は初めてで、GUI を構築するための非常に強力なツールのようですが、GridBagSizer について質問があります。GridBagSizer 内に配置されたアイテムのサイズを、配置されるべきフレームのサイズに調整する方法を教えてください。最後にサンプルを添付しました: 8 から 13 までのボタンがフレームを超えています、しかし、私が望むのは、ボタンのサイズをフレームに合わせて自動的にサイズ変更することです。アドバイスや提案をいただければ幸いです。

よろしく、ニキータ

import wx

class Frame ( wx.Frame ):
   def __init__( self ):
      wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = wx.EmptyString, pos =                wx.DefaultPosition, size = wx.Size( 500,300 ), style = wx.DEFAULT_FRAME_STYLE & ~   (wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.RESIZE_BORDER) )
      nums = (('1',(0,3)), ('2',(2,3)), ('14', (3,3)), ('15',(4,3)), ('16',(5,3)), ('17',(6,3)), ('18',(7,3)),
        ('3',(1,0)), ('4',(1,1)), ('5',(1,2)), ('6',(1,3)), ('7',(1,4)), ('8',(1,5)), ('9',(1,6)), ('10',(1,7)),
        ('11',(1,8)), ('12',(1,9)), ('13',(1,10)))

      panel = wx.Panel(self,-1)
      panel.SetBackgroundColour("green")
      grid = wx.GridBagSizer(2,2)

      for num, pos in nums:
         button = wx.Button(panel, wx.NewId(), label = num)
         grid.Add(button, pos, flag=wx.EXPAND)

      bs2 = wx.BoxSizer(wx.VERTICAL)
      bs2.Add(grid, 0, wx.EXPAND,0)

      panel.SetSizer(bs2)
      panel.Layout()
      self.mainSizer = wx.BoxSizer(wx.VERTICAL)
      self.mainSizer.Add(panel, 0, wx.EXPAND, 0)
      self.SetSizer(self.mainSizer)
      self.Layout()

if __name__=='__main__':
   app=wx.PySimpleApp()
   app.frame = Frame()
   app.frame.Center()
   app.frame.Show(True)
   app.MainLoop()
4

1 に答える 1

3

次のコマンドを呼び出して、列を拡大できるようにする必要がありますAddGrowableCol

  for i in range(11):
      grid.AddGrowableCol(i)

これで、成長できますが、初期サイズを超えて縮小することはありません。したがって、開始サイズも小さくする必要があります。

  for num, pos in nums:
     button = wx.Button(panel, wx.NewId(), size=(10,-1), label = num)
     #original code was:  button = wx.Button(panel, wx.NewId(), label = num)
     grid.Add(button, pos, flag=wx.EXPAND)

完全なリストは次のとおりです。

import wx

class Frame ( wx.Frame ):
    def __init__( self ):
       wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = wx.EmptyString, pos =
                         wx.DefaultPosition, size = wx.Size( 500,300 ),
                         style = wx.DEFAULT_FRAME_STYLE & ~   (wx.MAXIMIZE_BOX|wx.MINIMIZE_BOX|wx.RESIZE_BORDER) )
       nums = (('1',(0,3)), ('2',(2,3)), ('14', (3,3)), ('15',(4,3)), ('16',(5,3)), ('17',(6,3)), ('18',(7,3)),
         ('3',(1,0)), ('4',(1,1)), ('5',(1,2)), ('6',(1,3)), ('7',(1,4)), ('8',(1,5)), ('9',(1,6)), ('10',(1,7)),
         ('11',(1,8)), ('12',(1,9)), ('13',(1,10)))

       panel = wx.Panel(self,-1)
       panel.SetBackgroundColour("green")
       grid = wx.GridBagSizer(2,2)

       for num, pos in nums:
           button = wx.Button(panel, wx.NewId(), size=(10,-1), label = num)
           grid.Add(button, pos, flag=wx.EXPAND)

       for i in range(11):
           grid.AddGrowableCol(i)

       bs2 = wx.BoxSizer(wx.VERTICAL)
       bs2.Add(grid, 0, wx.EXPAND,0)

       panel.SetSizer(bs2)
       panel.Layout()
       self.mainSizer = wx.BoxSizer(wx.VERTICAL)
       self.mainSizer.Add(panel, 0, wx.EXPAND, 0)
       self.SetSizer(self.mainSizer)
       self.Layout()

if __name__=='__main__':
    app=wx.PySimpleApp()
    app.frame = Frame()
    app.frame.Center()
    app.frame.Show(True)
    app.MainLoop()
于 2012-10-16T08:12:29.340 に答える