mathi hat geschrieben:wie kann man die Variable X1 bzw. self.X1 aus der Klasse LeftNotebook() in die Klasse ErgebnisPanel() übergeben, um damit in der Methode onCalc() zu rechnen?
Hallo mathi!
Das eine Panel sollte vom anderen Panel nichts wissen müssen. Das zu erreichen, gibt es mehrere Ansätze. Die eine Variante ist die, dass man das eine Panel einen Event auslösen lässt, den man vom gemeinsamen Container aus "handeln" kann. Die andere einfachere Variante ist die, dass man den Container, in dem beide Panels liegen, als Schnittstelle dienen lässt. Wieder weiß keines von beiden Panels, dass es das andere Panel gibt. Nur der Container, welcher sowiso von der Existenz der beiden Panels weiß, arbeitet mit den Panels.
Z.B. so:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class LeftPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.SetBackgroundColour("white")
vbox = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(vbox)
vbox.AddStretchSpacer()
self.txt_ctrl = wx.TextCtrl(self, size = (200, -1))
vbox.Add(self.txt_ctrl, 0, wx.EXPAND | wx.ALL, 10)
vbox.AddStretchSpacer()
class RightPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
self.SetBackgroundColour("yellow")
vbox = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(vbox)
vbox.AddStretchSpacer()
self.label = wx.StaticText(self)
vbox.Add(self.label, 0, wx.EXPAND | wx.ALL, 10)
vbox.AddStretchSpacer()
class MyFrame(wx.Frame):
def __init__(self, parent = None, title = "Example"):
wx.Frame.__init__(self, parent, -1, title)
base_panel = wx.Panel(self)
hbox_main = wx.BoxSizer(wx.HORIZONTAL)
base_panel.SetSizer(hbox_main)
self.left_panel = LeftPanel(base_panel)
hbox_main.Add(self.left_panel, 1, wx.EXPAND | wx.ALL, 3)
self.left_panel.txt_ctrl.Bind(wx.EVT_TEXT, self.on_left_panel_txt_ctrl_text)
self.right_panel = RightPanel(base_panel)
hbox_main.Add(self.right_panel, 1, wx.EXPAND | wx.ALL, 3)
# Layout
base_panel.Fit()
self.Fit()
self.SetMinSize(self.GetSize())
def on_left_panel_txt_ctrl_text(self, event):
value = self.left_panel.txt_ctrl.GetValue()
try:
value = int(value)
str_value = str(value ** 2)
self.right_panel.label.SetLabel(str_value)
except ValueError:
self.right_panel.label.SetLabel("")
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Siehe auch hier:
http://www.python-forum.de/topic-14587.html
mfg
Gerold
