ich habe ein Problem, wahrscheinlich habe ich mein Programm falsch rum angefangen. Jedenfalls fehlt mir momentan die Idee wie ich folgendes Problem lösen kann:
Ich habe ein Programm (Python + wxPython + pySerial), mit dem ich ein Steuerungs-System ansprechen kann. Damit soll das System getestet werden, daher sind relativ viele verschiedene Aktionen erforderlich.
Das Programm besteht in der Basis aus einem großen Frame, mit einem großen TextCtrl, in dem alle Aktionen beschrieben werden (was geht raus zur Steuerung, was kommt zurück). Dann gibt es ein paar ComboBoxen um Dinge auszuwählen und eine Button-Sammlung um Aktionen auszulösen. So weit so schön, funktioniert sogar.

Leider schaffe ich es nicht, das Programm zu modularisieren, da die Ausgaben in das Textfeld über Methoden des Haupt-Frames erfolgen.
Ich kürze den Code mal auf das Wesentliche zusammen. Für die Ausgaben habe ich Methoden in mehreren Farben.
Code: Alles auswählen
class Frame(wx.Frame):
# [ ... ]
self.TextFeld = wx.TextCtrl(panel, -1, size=(780, 430), # pos=(10, 30),
style=wx.TE_MULTILINE | wx.TE_RICH2 | wx.TE_READONLY)
# [ ... ]
def roterText(self, text):
self.TextFeld.SetDefaultStyle(wx.TextAttr("red"))
self.TextFeld.AppendText(text) # ins Textfeld schreiben
LogFile.SchreibeText(text) # ggf. ins Logfile schreiben
# [ ... ]
class App(wx.App):
global HighVersion, LowVersion, BuildDate
def OnInit(self):
self.frame = Frame()
if self.frame.portOK: # wir haben einen gültigen seriellen Port, dann weiter
self.frame.Show()
self.SetTopWindow(self.frame)
self.frame.schwarzerText(' %s - Starte rvmDiag Version %i.%i vom %s'
%(Zeitstempel(0), HighVersion, LowVersion, BuildDate) )
return True
if __name__ == '__main__':
LogFile = clLogFile()
#OpenPort()
app = App()
if not app.frame.portOK:
app.frame.Destroy()
app.MainLoop()
ClosePort()
Das Problem sind Ausgaben von Hilfsfunktionen, die von "aussen" kommen. Diese erfolgen durch app.frame.roterText("Beispiel").
Wenn der Aufrufer im selben File steht, klappt das. Möchte ich modularisieren und Teile in andere Dateien auslagern, finden diese "app" nicht, nicht mal, wenn ich die Hauptdatei im Zirkelschluss importiere. (was schon gruselig genug wäre).
Ich grüble jetzt seit Tagen (immer mal wieder, nicht Vollzeit


Viele Grüße
Matthias