我正在尝试创建一个包含3个StaticText条目的框架(在垂直BoxSizer中)。当您单击某个条目时,我希望第二个StaticText对象直接显示在它下面(并且它下面的所有其他条目都会向下移动)。
现在,我可以在单击第一个静态文本时显示第二个静态文本,但我不知道如何在第一个文本对象下面获取第二个文本对象,而不会覆盖任何内容。我的代码附在下面。
我感谢你的帮助!
import wx
class myFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'Hiding t2 properly')
self.panel = wx.Panel(self, -1)
self.panel.SetMaxSize((200,-1))
self.t1s = []
self.t2s = []
self.sizer = wx.BoxSizer(wx.VERTICAL)
for i in xrange(3):
## t1 is always visible.
t1 = wx.StaticText(self.panel, label="t1-"+str(i))
## t2 should appear under its respective t1 when t1 is clicked.
##(it should also disappear, without leaving blank space, when
## t1 is clicked again).
t2 = wx.StaticText(self.panel, label="t2-"+str(i))
self.t1s.append(t1)
self.t2s.append(t2)
self.sizer.Add(t1, 0, wx.EXPAND)
self.sizer.Add(t2, 0, wx.EXPAND)
t1.Bind(wx.EVT_LEFT_UP, lambda evt: self.onClick(evt))
t2.Hide()
self.panel.SetSizer(self.sizer)
self.panel.SetAutoLayout(True)
self.sizer.Fit(self.panel)
def onClick(self, evt):
t1 = evt.GetEventObject()
i = self.t1s.index(t1)
t2 = self.t2s[i]
if t2.IsShown(): ## hide t2 and eliminate empty space
t2.Hide()
## What else goes here?
else: #show t2
t2.Show()
## What else goes here?
app = wx.App()
frame = myFrame()
frame.Show()
app.MainLoop()
答案 0 :(得分:0)
您需要将此行添加到代码中:
self.panel.Layout()
像这样
def onClick(self, evt):
t1 = evt.GetEventObject()
i = self.t1s.index(t1)
t2 = self.t2s[i]
if t2.IsShown():
t2.Hide()
self.panel.Layout()
else:
t2.Show()
self.panel.Layout()
这会重新绘制面板布局及其所有组件。您还可以使用sizer的Layout()
方法:self.sizer.Layout()