我有一个wxPython的GUI布局,我想让它可以被用户配置。 最简单的例子是这样的。
+++++++++++++++++
+ Text1 + Text2 +
+++++++++++++++++
然后我想添加一个按钮,隐藏 "Text2",并允许 "Text1 "占据该空间,在该空间中水平居中,就像这样。
+++++++++++++++++
+ Text1 +
+++++++++++++++++
我已经尝试了各种GridBagSizers的方法 并将这些文本控件放置在其他各种水平和垂直的boxsizers中 但我似乎不知道该如何实现这个目标。 当然,我可以让 "Text2 "被隐藏起来,但它保持了那个为它预留的空间,这意味着 "Text1 "仍然占据了左边的空间,并且在整个空间中不是水平居中。
有什么办法吗?
关键是 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()
如果你想得到额外的文字,你可能要有一些创意 *
角色在里面也。