wxpython Show出来后位置变了

我将按键摆在布局中并隐藏,希望当触发事件时显示出来。
但触发时间显示时的位置却改变了,请问我应该怎么做?
在隐藏前的位置为右下角,但隐藏再显示出来却到了左上角。

img

摆入布局的代码

self.EIB_bt = wx.Button(self, -1, "EIB")
sizer.Add(self.EIB_bt, pos=(3, 7), span=(0, 1), flag=wx.EXPAND, border=5)
sizer.Add(wx.StaticText(self,-1,"xxxxxx"), pos=(6, 2), span=(0, 1),flag=wx.EXPAND, border=5)
self.EIB_bt.Hide()

触发事件代码

    def chose_report_fun(self, event):
        self.bt_Enable_False([self.report_choice,self.select_bt])
        # self.update_bt.Enable(False)
        # self.delete_bt.Enable(False)
        # self.insert_bt.Enable(False)
        self.grid.ClearGrid()
        # self.grid.Back

        self.update_bt.Enable(False)
        ch1_value = self.report_choice.GetStringSelection()
        print(ch1_value)
        if ch1_value in ['sd as aswqd']:
            self.EIB_bt.Show()
        else:
            self.EIB_bt.Hide()

研究了下 EXPAND布局 , 找到解决办法了,供参考
self.EIB_bt.Hide() 不能在init 里执行,要在你的 frame.show() 后执行。 这样就不会错位了。

绝对位置没发现问题。

import wx

class MyButton(wx.Frame):
    flag = True
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title)
        panel=wx.Panel(self,-1,size=(300,250))
        self.btn1 = wx.Button(panel,201,u'设置',pos=(80,70))
        self.Bind(wx.EVT_BUTTON, self.click1, self.btn1)
        self.btn2 = wx.Button(panel, 202, u'设置2', pos=(180, 70))
        self.Bind(wx.EVT_BUTTON, self.click2, self.btn2)
        self.Centre()
    def click1(self,e ):
        print("btn1 click!")
        if self.flag:
            self.btn2.Hide()
            self.flag = False
        else:
            # self.btn2.Disable()
            self.btn2.Show()
            self.flag = True
    def click2(self,e):
        print("btn2 click!")


if __name__=='__main__':
    app=wx.App()
    frame=MyButton(None,-1,u'按钮示例')
    frame.Show()
    app.MainLoop()

可能 和你的 EXPAND布局有关。 或者不用Hide 和Show ,用 Disable() 和 Enable()