关键是Layout() 命令,以确保sizer 重新计算自己和他们的孩子。
这是一个切换文本的示例:
import wx
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Show/Hide", size=(300,150))
self.t1 = wx.StaticText(self, -1, ' Text1 ')
self.t2 = wx.StaticText(self, -1, ' ')
self.t3 = wx.StaticText(self, -1, ' Text2 ')
b1 = wx.Button(self, -1, 'Adjust Sizer')
self.vsizer = wx.BoxSizer(wx.VERTICAL)
self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
self.vsizer.Add(wx.StaticText(self, -1, '****************************'), 0, wx.ALIGN_CENTRE_HORIZONTAL, 0)
self.hsizer.Add(self.t1, 1, 0, 0)
self.hsizer.Add(self.t2, 0, 0, 0)
self.hsizer.Add(self.t3, 1, 0, 0)
self.vsizer.Add(self.hsizer,0,wx.ALIGN_CENTRE_HORIZONTAL)
self.vsizer.Add(wx.StaticText(self, -1, '****************************'), 0, wx.ALIGN_CENTRE_HORIZONTAL, 0)
self.vsizer.Add(b1, 0, 0, 0)
self.Bind(wx.EVT_BUTTON, self.OnAssign)
self.SetSizer(self.vsizer)
self.Show()
def OnAssign(self, event):
if self.t2.IsShown():
self.t2.Hide()
self.t3.Hide()
else:
self.t2.Show()
self.t3.Show()
self.Layout()
if __name__ == "__main__":
app = wx.App()
frame = MyFrame()
app.MainLoop()
如果您还想在其中添加额外的 * 字符,您可能需要发挥创造力。