Python+wxpythonのプログラムで、buttonがアクティブにならない
Linux環境では問題なく動作していたので、Windows10でも動作するだろうと思っていたら、ボタンが表示はされているがアクティブにならない現象が発生!
しばらく悩んだ末、原因判明というか、対応策が判明!
NGだったのは
sizer_4 = wx.BoxSizer(wx.VERTICAL) self.panel_1 = wx.Panel(self, wx.ID_ANY) self.panel_3 = wx.Panel(self, wx.ID_ANY) self.button_1 = wx.Button(self.panel_3, wx.ID_EXIT, "") self.button_2 = wx.Button(self.panel_3, wx.ID_ANY, "AAAA") self.button_3 = wx.Button(self.panel_3, wx.ID_ANY, "BBBB") sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.Add(label_1, 1, wx.EXPAND, 0) sizer_4.Add(self.button_1, 0, wx.ALIGN_RIGHT | wx.ALL, 10) sizer_4.Add(self.button_2, 0, wx.ALIGN_RIGHT | wx.ALL, 10) sizer_4.Add(self.button_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10) self.panel_3.SetSizer(sizer_4) sizer_2.Add(self.panel_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
要は、sizer4をpanel3に貼り付けて、sizer2へ
これを
sizer_2.Add(label_1, 1, wx.EXPAND, 0) self.panel_1 = wx.Panel(self, wx.ID_ANY) self.button_1 = wx.Button(self.panel_1, wx.ID_EXIT, "") self.button_2 = wx.Button(self.panel_1, wx.ID_ANY, "AAAA") self.button_3 = wx.Button(self.panel_1, wx.ID_ANY, "BBBB") sizer_4 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.HORIZONTAL) sizer_4.Add(self.button_1, 0, wx.ALIGN_RIGHT | wx.ALL, 10) sizer_4.Add(self.button_2, 0, wx.ALIGN_RIGHT | wx.ALL, 10) sizer_4.Add(self.button_3, 0, wx.ALIGN_RIGHT | wx.ALL, 10) sizer_2.Add(sizer_4, 0, wx.ALIGN_RIGHT | wx.ALL, 10)
sizer4をpanel3をかいさないで、直接sizer2に貼付け
これで、無事windows10でも問題なく動作しました。もちろん、Linuxも
全体的なサイズを決めたい場合など、Panelを介したいと思いますし、ルール的には問題ないと思いますが、極力省けるパネルは入れないようにして、デザインもsizerで設定したほうが、マルチプラットフォームを考えたとき良さそうです。