lost_mind hat geschrieben:wie kan ich dann von einer ganz anderen Klasse die frame ansprechen?
Hi lost_mind!
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyFirstFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "My First Frame"):
wx.Frame.__init__(self, parent, id, title)
self.app = wx.GetApp()
# Panel
panel = wx.Panel(self)
font = panel.GetFont()
font.SetPointSize(font.GetPointSize() + 2)
panel.SetFont(font)
self.panel = panel
# Main-Sizer
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
# Label
self.my_label = wx.StaticText(panel, size = wx.Size(200, -1))
self.my_label.SetBackgroundColour("yellow")
vbox_main.Add(self.my_label, 0, wx.EXPAND | wx.ALL, 10)
# Button 1
my_button = wx.Button(panel, -1, "Show second frame")
vbox_main.Add(my_button, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
my_button.Bind(wx.EVT_BUTTON, self.show_second_frame)
# Layout
panel.Fit()
self.Fit()
self.SetSizeHintsSz(self.GetSize())
def show_second_frame(self, event = None):
app = wx.GetApp()
app.show_second_frame()
class MySecondFrame(wx.Frame):
def __init__(self, parent = None, id = -1, title = "My Second Frame"):
wx.Frame.__init__(self, parent, id, title)
self.app = wx.GetApp()
# Panel
panel = wx.Panel(self)
font = panel.GetFont()
font.SetPointSize(font.GetPointSize() + 2)
panel.SetFont(font)
# Main-Sizer
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
# Button 1
my_button = wx.Button(panel, -1, "Send value to first frame")
vbox_main.Add(my_button, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
my_button.Bind(wx.EVT_BUTTON, self.send_value_to_first_frame)
# Layout
panel.Fit()
self.Fit()
self.SetSizeHintsSz(self.GetSize())
def send_value_to_first_frame(self, event = None):
app = wx.GetApp()
assert isinstance(app, MyApp)
ff = app.my_first_frame
ff.my_label.SetLabel("Hallo!")
ff.panel.Layout()
class MyApp(wx.PySimpleApp):
def OnInit(self):
self.my_first_frame = None
self.my_second_frame = None
self.show_first_frame()
return True
def show_first_frame(self):
if not isinstance(self.my_first_frame, MyFirstFrame):
self.my_first_frame = MyFirstFrame()
self.my_first_frame.Show()
def show_second_frame(self):
if not isinstance(self.my_second_frame, MySecondFrame):
self.my_second_frame = MySecondFrame(self.my_first_frame)
self.my_second_frame.Show()
def main():
app = MyApp()
app.MainLoop()
if __name__ == "__main__":
main()
mfg
Gerold
Edit: Code verändert