###実現したいこと
wxpythonで作成したものに、ボタンを複数指定して表示します。
最初は、ボタンを配置するパネルは、自動で最大幅になっているのですが、
更新してボタンを配置後、最小の幅?になってしまいます。(フレームの大きさを変えると、自動で幅いっぱいになります。)
それを解消したいのです。
以下がコードです。
python
1# -*- coding: utf-8 -*- 2 3import wx 4import wx.xrc 5 6button = [] 7########################################################################### 8## Class MyFrame1 9########################################################################### 10 11class MyFrame1 ( wx.Frame ): 12 13 def __init__( self, parent ): 14 wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"枠を作ろう", pos = wx.DefaultPosition, size = wx.Size( 687,457 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) 15 16 self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) 17 18 bSizer1 = wx.BoxSizer( wx.VERTICAL ) 19 20 ###1列目### 21 bSizer2 = wx.BoxSizer( wx.HORIZONTAL ) 22 23 self.m_staticText1 = wx.StaticText( self, wx.ID_ANY, u"縦", wx.DefaultPosition, wx.DefaultSize, 0 ) 24 self.m_staticText1.Wrap( -1 ) 25 26 bSizer2.Add( self.m_staticText1, 0, wx.ALL, 5 ) 27 28 self.w_textCtrl = wx.TextCtrl( self, wx.ID_ANY, u"縦の数", wx.DefaultPosition, wx.DefaultSize, 0 ) 29 bSizer2.Add( self.w_textCtrl, 0, wx.ALL, 5 ) 30 31 self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"横", wx.DefaultPosition, wx.DefaultSize, 0 ) 32 self.m_staticText2.Wrap( -1 ) 33 34 bSizer2.Add( self.m_staticText2, 0, wx.ALL, 5 ) 35 36 self.h_textCtrl = wx.TextCtrl( self, wx.ID_ANY, u"横の数", wx.DefaultPosition, wx.DefaultSize, 0 ) 37 bSizer2.Add( self.h_textCtrl, 0, wx.ALL, 5 ) 38 39 self.make_button = wx.Button( self, wx.ID_ANY, u"作成", wx.DefaultPosition, wx.DefaultSize, 0 ) 40 bSizer2.Add( self.make_button, 0, wx.ALL, 5 ) 41 42 bSizer1.Add( bSizer2, 0, wx.EXPAND, 5 ) 43 44 ###2列目### ←ここのサイズが更新時に変わっていまう。 45 self.mainPanel = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) 46 self.mainPanel.SetMinSize( wx.Size( 300,500 ) ) ←ここでサイズを指定しても無視されます。 47 self.mainPanel.Layout() 48 bSizer1.Add( self.mainPanel, 1, wx.EXPAND |wx.ALL, 5 ) 49 50 self.SetSizer( bSizer1 ) 51 self.Layout() 52 self.Centre( wx.BOTH ) 53 54 # Connect Events 55 self.make_button.Bind( wx.EVT_BUTTON, self.make_buttonOnButtonClick ) 56 57 def __del__( self ): 58 pass 59 60 61 # Virtual event handlers, overide them in your derived class 62 def make_buttonOnButtonClick( self, event ): 63 self.button_del() 64 #フォームの値を読み込む 65 tate = int(self.w_textCtrl.GetValue()) 66 yoko = int(self.h_textCtrl.GetValue()) 67 68 obj_button =[] #ボタンID格納用 69 button = [] #ボタン本体 70 for i in range( tate * yoko ) : 71 labeltext = str(i+1) +"番" 72 button.append(wx.Button(self.mainPanel, wx.ID_ANY, labeltext, wx.DefaultPosition, wx.DefaultSize, wx.BU_LEFT ) ) 73 74 gsizer = wx.GridSizer( tate , yoko , 5, 10) 75 for j in range( tate * yoko ) : 76 #座席ボタンの配置 77 button[j].SetFont(wx.Font( 11, wx.FONTFAMILY_MODERN, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, "MS Pゴシック")) 78 gsizer.Add(button[j],1, flag=wx.EXPAND ) 79 obj_button.append(id(button[j])) 80 print(button[j]) 81 82 self.mainPanel.SetSizer(gsizer) 83 self.SetAutoLayout(True) 84 gsizer.Fit( self.mainPanel ) 85 86 #####ボタンの消去##### 87 def button_del(self): 88 global button 89 for i in button : 90 i.Destroy() 91 92if __name__ == '__main__': 93 app = wx.App(False) 94 frame = MyFrame1(None) 95 frame.Show(True) 96 app.MainLoop()
「def make_buttonOnButtonClick」でサイズを指定しても、同様の結果でした。
ただし、デバックで同関数の最後で一旦止めて、再開すると、最大サイズで表示されます。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/12 12:41