日: 2019年10月7日

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で設定したほうが、マルチプラットフォームを考えたとき良さそうです。