Crosslink von einer Class zur anderen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Frederik
User
Beiträge: 11
Registriert: Dienstag 28. April 2009, 00:37

Ich versuche, aus einer "subclass" (NoteScans) eine Variable in einer anderen "subclass" (NoteFrames) zu setzen (ohne Verwendung von globalen Variablen): mein Code laesst sich reduzieren auf folgendes:

Code: Alles auswählen

import wx


class NoteFrames(wx.Panel):
	def __init__(self, parent):
		wx.Panel.__init__(self, parent, style=wx.WANTS_CHARS)
		self.number = 1

class NoteScans(wx.Panel):
	def __init__(self, parent):
		wx.Panel.__init__(self, parent, style=wx.WANTS_CHARS)
		self.pp = parent.GetParent()
		self.crosslink = self.pp.subclass_1
		print self.crosslink.number # Soll die Variable setzen / lesen / was auch immer

class MainWindow(wx.Frame):

	def __init__(self, parent, id, title):
		wx.Frame.__init__(self, parent, id, title, size=(1000,700))
		panel = wx.Panel(self, -1)
		self.subclass_1 = NoteFrames(panel)
		self.subclass_2 = NoteScans(panel)
		self.Show(True)


app = wx.App(0)

MainWindow(None, -1, 'Name')
app.MainLoop()
Leider bekomme ich folgende Fehlermeldung:
Traceback (most recent call last):
File "mdaProtest1.py", line 24, in <module>
MainWindow(None, -1, 'Name')
File "mdaProtest1.py", line 19, in __init__
self.subclass_1 = NoteScans(panel)
File "mdaProtest1.py", line 13, in __init__
self.crosslink = self.pp.subclass_2
AttributeError: 'MainWindow' object has no attribute 'subclass_2'
Auf der website http://zetcode.com/wxpython/firststeps/ findet sich ein aehnliches Beispiel, das funktioniert, ich finde aber partout keinen Fehler im obigen Code... :K

Kann mir jemand einen Tipp geben? :lol:

Herzlichen Dank im Voraus!

Frederik
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Also die Fehlermeldung passt schon mal nicht zu dem Code, den du gepostet hast.
Frederik
User
Beiträge: 11
Registriert: Dienstag 28. April 2009, 00:37

Willst du wetten? :P

Aber es stimmt, die Zeilennummern sind um 1 verschoben, falls du das meinst.
BlackJack

@Frederik: Na dann lass uns wetten: Der Traceback gibt die Zeile ``self.crosslink = self.pp.subclass_2`` als Ursache an, die kommt in Deinem Quelltext nirgends vor. :roll:
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Frederik hat geschrieben:Willst du wetten? :P
File "mdaProtest1.py", line 13, in __init__
self.crosslink = self.pp.subclass_2
AttributeError: 'MainWindow' object has no attribute 'subclass_2'
Diese Zeile kann ich in deinem Code nicht entdecken! Ich weiß, du hast wohl nur die Frames getauscht oder was auch immer, aber wer weiß was sich da noch eingeschlichen hat. Zeige am besten Code und Fehlermeldung, die dieser Code produziert, dann muss man nicht raten.
Frederik
User
Beiträge: 11
Registriert: Dienstag 28. April 2009, 00:37

Richtig :? Hast gewonnen.
Sorry.

Ich habe auch gerade selber den Fehler gefunden. Ich hatte in meiner Version auf dem Rechner die Deklarationsreihenfolge der beiden "subclasses" vertauscht, aber beim Schreiben im Browser richtig gemacht, daher ist der Code auch funktionsfaehig...

Also, danke fuers kritische Draufschauen :)

Frederik
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Frederik hat geschrieben:aber beim Schreiben im Browser richtig gemacht,
Copy&Paste existiert!
(und sollte gerade in solchen Fällen wie diesem auch angewendet werden!)
Antworten