前提・実現したいこと
wxpythonで、Pnael2のボタンイベントに応じ動的にPanel1を追加するプログラムを組んでいるのですが
追加した分のパネルの表示がずれてしまいます。
該当のソースコード
python
1ソースコード 2 3 4import wx 5import wx.xrc 6 7class MyFrame1 ( wx.Frame ): 8 9 def __init__( self ): 10 wx.Frame.__init__ ( self, None) 11 12 self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) 13 14 bSizer1 = wx.BoxSizer( wx.HORIZONTAL ) 15 self.bSizer2 = wx.BoxSizer( wx.VERTICAL ) 16 self.bSizer10 = wx.BoxSizer( wx.HORIZONTAL ) 17 self.panel1 = Panel1(self) 18 self.panel1_list = [] 19 self.panel1_list.append(self.panel1) 20 self.bSizer10.Add( self.panel1, 1, wx.EXPAND |wx.ALL, 5 ) 21 self.bSizer2.Add( self.bSizer10, 1, wx.EXPAND |wx.ALL, 5 ) 22 self.panel2 = Panel2(self) 23 self.bSizer2.Add( self.panel2, 1, wx.EXPAND |wx.ALL, 5 ) 24 bSizer1.Add( self.bSizer2, 4, wx.EXPAND, 5 ) 25 26 self.SetSizer( bSizer1 ) 27 self.Layout() 28 29 30 def __del__( self ): 31 pass 32 33 34class Panel1(wx.Panel): 35 def __init__( self, parent ): 36 wx.Panel.__init__( self, parent, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) 37 self.parent = parent 38 self.gbSizer3 = wx.GridBagSizer( 0, 0 ) 39 self.gbSizer3.SetFlexibleDirection( wx.BOTH ) 40 self.gbSizer3.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED ) 41 self.m_staticText8 = wx.StaticText( self, wx.ID_ANY, u"Panel1 ", wx.DefaultPosition, wx.DefaultSize, 0 ) 42 self.m_staticText8.Wrap( -1 ) 43 self.gbSizer3.Add( self.m_staticText8, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 ) 44 self.button1 = wx.Button( self, wx.ID_ANY, u"+", wx.DefaultPosition, wx.Size( 40,-1 ), 0 ) 45 self.gbSizer3.Add( self.button1, wx.GBPosition( 0, 1 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 ) 46 self.SetSizer( self.gbSizer3 ) 47 self.Layout() 48 self.gbSizer3.Fit( self ) 49 50class Panel2(wx.Panel): 51 def __init__( self, parent ): 52 wx.Panel.__init__( self, parent, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) 53 self.parent = parent 54 self.gbSizer7 = wx.BoxSizer( wx.VERTICAL ) 55 self.m_staticText6 = wx.StaticText( self, wx.ID_ANY, u"Panel2", wx.DefaultPosition, wx.DefaultSize, 0 ) 56 self.m_staticText6.Wrap( -1 ) 57 self.gbSizer7.Add( self.m_staticText6, 0, wx.EXPAND |wx.ALL, 5 ) 58 self.Add_Panel = wx.Button( self, wx.ID_ANY, u"+", wx.DefaultPosition, wx.Size( 40,-1 ), 0 ) 59 self.gbSizer7.Add( self.Add_Panel, 0, wx.EXPAND |wx.ALL, 5 ) 60 self.SetSizer( self.gbSizer7 ) 61 self.Layout() 62 self.gbSizer7.Fit( self ) 63 64 self.Add_Panel.Bind( wx.EVT_BUTTON, self.Add_PanelOnButtonClick ) 65 66 #Panel1追加イベント 67 def Add_PanelOnButtonClick( self, event ): 68 69 self.parent.panel1 = Panel1(self) 70 self.parent.panel1_list.append(self.parent.panel1) 71 self.parent.bSizer10.Add( self.parent.panel1, 1, wx.EXPAND |wx.ALL, 5 ) 72 self.parent.Layout() 73 self.parent.bSizer10.Layout() 74 75 76 77if __name__ == '__main__': 78 app = wx.App() 79 main_win = MyFrame1() 80 main_win.Show() 81 app.MainLoop()
ボタンイベントでのLayout()の対象を上位のSizerに変更してみましたがうまくいきませんでした。
どのように訂正すればうまく表示されるでしょうか。
初学者のためコードに見づらい部分あるかと思いますが、どなたかご指導お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/16 04:32