在wxPython中,如何调整静态文本的大小,使其占用隐藏的静态文本项的空间?

问题描述 投票:0回答:1

我有一个wxPython的GUI布局,我想让它可以被用户配置。 最简单的例子是这样的。

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

然后我想添加一个按钮,隐藏 "Text2",并允许 "Text1 "占据该空间,在该空间中水平居中,就像这样。

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

我已经尝试了各种GridBagSizers的方法 并将这些文本控件放置在其他各种水平和垂直的boxsizers中 但我似乎不知道该如何实现这个目标。 当然,我可以让 "Text2 "被隐藏起来,但它保持了那个为它预留的空间,这意味着 "Text1 "仍然占据了左边的空间,并且在整个空间中不是水平居中。

有什么办法吗?

python wxpython
1个回答
0
投票

关键是 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()

enter image description here enter image description here

如果你想得到额外的文字,你可能要有一些创意 * 角色在里面也。

© www.soinside.com 2019 - 2024. All rights reserved.