Du brauchst da ReplaceWindow (Funktion von SplitterWindow).
Da dann das alte auch noch durchschien, ist der (komplizierte)
Show und Hide Mechanismus erforderlich.
Vielleicht geht es aber auch einfacher.
Ich hoffe, deine Frage richtig verstanden zu haben und
poste nochmals das geänderte Sample.
BTW: Auch für mich sehr lehrreich.
Code: Alles auswählen
import wx # This module uses the new wx namespace
_treeList = [
# new stuff
('Recent Additions/Updates', [
'FoldPanelBar',
'GIFAnimationCtrl',
'HyperLinkCtrl',
'MultiSplitterWindow',
'Throbber',
'GetMouseState',
'FloatCanvas',
]),
# managed windows == things with a (optional) caption you can close
('Frames and Dialogs', [
'Dialog',
'Frame',
'MDIWindows',
'MiniFrame',
'Wizard',
]),
]
#---------------------------------------------------------------------------
class wxPythonDemo(wx.Frame):
overviewText = "wxPython Overview"
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, size = (950, 720),
style=wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
self.SetMinSize((640,480))
self.splitter = splitter = wx.SplitterWindow(self, -1, style=wx.CLIP_CHILDREN | wx.SP_LIVE_UPDATE | wx.SP_3D)
def EmptyHandler(evt): pass
splitter.Bind(wx.EVT_ERASE_BACKGROUND, EmptyHandler)
self.treeMap = {}
self.tree = wx.TreeCtrl(splitter, -1, style =
wx.TR_DEFAULT_STYLE #| wx.TR_HAS_VARIABLE_ROW_HEIGHT
)
self.toggle = 0
root = self.tree.AddRoot("wxPython Overview")
firstChild = None
for item in _treeList:
child = self.tree.AppendItem(root, item[0])
if not firstChild: firstChild = child
for childItem in item[1]:
theDemo = self.tree.AppendItem(child, childItem)
self.treeMap[childItem] = theDemo
self.idPanel = wx.Panel(splitter)
self.idPStatic = wx.StaticText(self.idPanel, label = "idPanel", pos = ((100, 100)))
self.selectionPanel = wx.Panel(splitter)
self.idPselection = wx.StaticText(self.selectionPanel, label = "idSelection", pos = ((100, 200)))
self.idPanel.Hide()
self.tree.Bind (wx.EVT_TREE_SEL_CHANGING, self.OnSelChanged)
# add the windows to the splitter and split it.
splitter.SplitVertically(self.tree, self.idPanel, 200)
splitter.SplitVertically(self.tree, self.selectionPanel, 200)
splitter.SetMinimumPaneSize(120)
self.tree.SelectItem(root)
def OnSelChanged(self, event):
item = event.GetItem()
text = self.tree.GetItemText(item)
print "OnSelChanged: ", text
if self.toggle:
print "id"
self.toggle = 0
#self.splitter.ReplaceWindow (self.idPanel, self.selectionPanel)
old = self.splitter.GetWindow2()
self.splitter.ReplaceWindow (self.splitter.GetWindow2(), self.selectionPanel)
old.Hide()
self.splitter.GetWindow2().Show()
#self.selectionPanel.Hide()
#self.idPanel.Show()
else:
print "selection"
self.toggle = 1
#self.splitter.ReplaceWindow (self.selectionPanel, self.idPanel)
old = self.splitter.GetWindow2()
self.splitter.ReplaceWindow (self.splitter.GetWindow2(), self.idPanel)
old.Hide()
self.splitter.GetWindow2().Show()
#self.idPanel.Hide()
#self.selectionPanel.Show()
#self.selectionPanel.Show()
#self.selectionPanel.Refresh()
class MyApp(wx.App):
def OnInit(self):
frame = wxPythonDemo(None, "wxPython: (A Demonstration)")
frame.Show()
return True
app = MyApp(False)
app.MainLoop()