如何调整 staticText 的大小以占用 wxPython 中隐藏的 staticText 项目使用的 space?

How can I resize a staticText to occupy space used by a hidden staticText item in wxPython?

我有一个 wxPython GUI 布局,我希望它是用户可配置的。最简单的例子是这样的:

+++++++++++++++++
+ Text1 + Text2 +
+++++++++++++++++

然后我想添加一个按钮,它将隐藏 "Text2" 并允许 "Text1" 超越 space,在 space 中水平居中,如下所示:

+++++++++++++++++
+     Text1     +
+++++++++++++++++

我尝试过使用 GridBagSizers 进行各种操作,并将这些文本控件放置在其他各种水平和垂直的 boxsizers 中,但我似乎无法弄清楚如何完成此操作。我当然可以让 "Text2" 被隐藏,但它保留了 space 保留给它,这意味着 "Text1" 仍然占据左侧的 space 并且没有水平居中在整个 space.

有什么想法吗?

关键是 Layout() 命令,以确保 sizer 重新计算自己及其 children。
这是一个将切换文本的示例:

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()

如果您还想要其中的额外 * 个字符,您可能需要发挥创造力。