Mach das mal bitte ohne Klassen nach und entscheide dann selbst, wie du programmieren möchtest.:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class ControlFrame(wx.Frame):
def __init__(self, parent = None, title = u"Control Frame"):
wx.Frame.__init__(self, parent, -1, title)
app = wx.GetApp()
self.app = app
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
hbox_buttons = wx.BoxSizer(wx.HORIZONTAL)
vbox_main.Add(hbox_buttons, 1, wx.EXPAND | wx.ALL, 5)
btn_left_frame = wx.Button(panel, label = u"Show Left Frame")
btn_left_frame.Bind(wx.EVT_BUTTON, app.show_left_frame)
hbox_buttons.Add(btn_left_frame, 0, wx.ALL, 5)
btn_right_frame = wx.Button(panel, label = u"Show Right Frame")
btn_right_frame.Bind(wx.EVT_BUTTON, app.show_right_frame)
hbox_buttons.Add(btn_right_frame, 0, wx.ALL, 5)
hbox_buttons.Add(wx.StaticLine(panel, style = wx.LI_VERTICAL), 0, wx.EXPAND | wx.ALL, 5)
btn_arrange_left_frame = wx.Button(panel, label = u"Arrange Left Frame")
hbox_buttons.Add(btn_arrange_left_frame, 0, wx.ALL, 5)
btn_arrange_left_frame.Bind(wx.EVT_BUTTON, self.on_arrange_left_frame)
btn_arrange_right_frame = wx.Button(panel, label = u"Arrange Right Frame")
hbox_buttons.Add(btn_arrange_right_frame, 0, wx.ALL, 5)
btn_arrange_right_frame.Bind(wx.EVT_BUTTON, self.on_arrange_right_frame)
panel.Fit()
self.Fit()
self.Move((0, 0))
self.SetSize((app.max_size.width, -1))
def on_arrange_left_frame(self, event = None):
try:
self.app.left_frame.arrange()
except AttributeError:
pass
def on_arrange_right_frame(self, event = None):
try:
self.app.right_frame.arrange()
except AttributeError:
pass
class LeftFrame(wx.Frame):
def __init__(self, parent = None, title = u"Left Frame"):
wx.Frame.__init__(self, parent, -1, title)
app = wx.GetApp()
self.app = app
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
vbox_content = wx.BoxSizer(wx.VERTICAL)
vbox_main.Add(vbox_content, 1, wx.EXPAND | wx.ALL, 5)
vbox_content.AddStretchSpacer()
btn_right_frame = wx.Button(panel, label = u"Show Right Frame")
vbox_content.Add(btn_right_frame, 0, wx.ALIGN_CENTER | wx.ALL, 5)
btn_right_frame.Bind(wx.EVT_BUTTON, app.show_right_frame)
vbox_content.AddStretchSpacer()
btn_arrange = wx.Button(panel, label = u"Arrange Frame")
vbox_content.Add(btn_arrange, 0, wx.ALIGN_CENTER | wx.ALL, 5)
btn_arrange.Bind(wx.EVT_BUTTON, self.arrange)
vbox_content.AddStretchSpacer()
def arrange(self, event = None):
control_frame = self.app.control_frame
control_frame_size = control_frame.GetSize()
control_frame_pos = control_frame.GetPosition()
max_size = self.app.max_size
self.Move((0, control_frame_pos.y + control_frame_size.height))
self.SetSize(
(
max_size.width / 2,
max_size.height - control_frame_pos.y - control_frame_size.height
)
)
class RightFrame(wx.Frame):
def __init__(self, parent = None, title = u"Right Frame"):
wx.Frame.__init__(self, parent, -1, title)
app = wx.GetApp()
self.app = app
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
vbox_content = wx.BoxSizer(wx.VERTICAL)
vbox_main.Add(vbox_content, 1, wx.EXPAND | wx.ALL, 5)
vbox_content.AddStretchSpacer()
btn_left_frame = wx.Button(panel, label = u"Show Left Frame")
vbox_content.Add(btn_left_frame, 0, wx.ALIGN_CENTER | wx.ALL, 5)
btn_left_frame.Bind(wx.EVT_BUTTON, app.show_left_frame)
vbox_content.AddStretchSpacer()
btn_arrange = wx.Button(panel, label = u"Arrange Frame")
vbox_content.Add(btn_arrange, 0, wx.ALIGN_CENTER | wx.ALL, 5)
btn_arrange.Bind(wx.EVT_BUTTON, self.arrange)
vbox_content.AddStretchSpacer()
def arrange(self, event = None):
control_frame = self.app.control_frame
control_frame_size = control_frame.GetSize()
control_frame_pos = control_frame.GetPosition()
max_size = self.app.max_size
self.Move((max_size.width / 2 , control_frame_pos.y + control_frame_size.height))
self.SetSize(
(
max_size.width / 2,
max_size.height - control_frame_pos.y - control_frame_size.height
)
)
class MyApp(wx.PySimpleApp):
control_frame = None
left_frame = None
right_frame = None
def OnInit(self):
self.get_max_size()
self.show_control_frame()
return True
def get_max_size(self):
dummy_frame = wx.Frame(None)
dummy_frame.Maximize()
self.max_size = dummy_frame.GetSize()
dummy_frame.Destroy()
def show_control_frame(self):
self.control_frame = ControlFrame()
self.control_frame.Show()
def show_left_frame(self, event = None):
if not isinstance(self.left_frame, LeftFrame):
self.left_frame = LeftFrame(self.control_frame)
self.left_frame.Show()
self.left_frame.SetFocus()
def show_right_frame(self, event = None):
if not isinstance(self.right_frame, RightFrame):
self.right_frame = RightFrame(self.control_frame)
self.right_frame.Show()
self.right_frame.SetFocus()
def main():
app = MyApp()
app.MainLoop()
if __name__ == "__main__":
main()
Und Ja! Dieser Code ist nur auf Windows mit *unten* angeordneter Taskbar optimiert. Für mehr fehlte mir die Zeit.