如何调整 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()
如果您还想要其中的额外 *
个字符,您可能需要发挥创造力。
我有一个 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()
如果您还想要其中的额外 *
个字符,您可能需要发挥创造力。