ich habe folgenden code:
Code: Alles auswählen
def Out(self,*txt):
for i in txt:
print "%s" % str(i) ,
print
Danke
Code: Alles auswählen
def Out(self,*txt):
for i in txt:
print "%s" % str(i) ,
print
Code: Alles auswählen
class App(wx.Frame):
"""
irgendeine Dummy-Klasse, weil keine Lust irgendwelche alten Posts nach
Deinem Code zu durchsuchen
"""
def __init__(self, ...):
#etwas Code von Dir
self.TextField = wx.TextCtrl(p,-1,"Nothing selected, yet.\n\n",size=sizetuple, wx.Default,style=wx.TE_MULTILINE)
#sizetuple musst Du definieren
def Out(self, txt):
self.TextField.WriteText(txt)
Code: Alles auswählen
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.Ausgabe_Text = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
Code: Alles auswählen
class App(wx.Frame):
[...]
self.mf = MyFrame(...)
Code: Alles auswählen
import MyFrame
def Out(self,*txt):
for i in txt:
MyFrame.MyFrame.Ausgabe_Text.AppendText(i)
Code: Alles auswählen
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
self.Ausgabe_Text = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
Code: Alles auswählen
import wx
class MyFrame(wx.Frame):
def __init__(self, prnt, id=-1):
self.Ausgabe_Text = wx.TextCtrl(parent=prnt, id=id,
style=wx.TE_MULTILINE,
)
class MyFrame2(wx.Frame):
def __init__(self,
parent=None,
id=-1,
title = "MyApp"):
wx.Frame.__init__(self, parent, id, title)
# Instanz von MyFrame
mf = MyFrame(self)
# So könnte man nun auf ``Ausgabe_Text`` von ``mf``
# zurückgreifen.
text = ["Hello World", "spam", "foo", "bar"]
for txt in text:
mf.Ausgabe_Text.AppendText("%s\n" % txt)
def main():
app = wx.PySimpleApp()
f = MyFrame2()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Code: Alles auswählen
mf = MyFrame(self)
Code: Alles auswählen
mf = MyFrame.MyFrame(self)
Code: Alles auswählen
import wx
class MyFrame(wx.Frame):
def __init__(self, prnt, id=-1):
self.Ausgabe_Text = wx.TextCtrl(parent=prnt, id=id,
style=wx.TE_MULTILINE,
)
Code: Alles auswählen
import wx
import MyFrame
class MyFrame2(wx.Frame):
def __init__(self,
parent=None,
id=-1,
title = "MyApp"):
wx.Frame.__init__(self, parent, id, title)
# Instanz von MyFrame
mf = MyFrame.MyFrame(self)
# So könnte man nun auf ``Ausgabe_Text`` von ``mf``
# zurückgreifen.
text = ["Hello World", "spam", "foo", "bar"]
for txt in text:
mf.Ausgabe_Text.AppendText("%s\n" % txt)
# etc
Code: Alles auswählen
import MyFrame
mf = MyFrame.MyFrame(self)
class Nachricht:
# def __init__(self):
debug_out = False
def Out(self,*txt):
for i in txt:
print "%s" % str(i) ,
print
def DOut(self,*txt): # debug
if not self.debug_out:
return
for i in txt:
mf.Ausgabe_Text("%s"%str(i),)
#print "%s"%str(i),
print
Code: Alles auswählen
class MyFrame2(wx.Frame):
def __init__(self,
parent=None,
id=-1,
title = "MyApp"):
wx.Frame.__init__(self, parent, id, title)
[...]
Code: Alles auswählen
mf = MyFrame.MyFrame(self)
Code: Alles auswählen
import wx
# Das ist die Spezialisierung von `wx.Frame` (Abgeleitet Klasse).
# Diese Spezialisierung wird später das Hauptfenster (Parent-Window)!
# Wenn man ein Hauptfenster erzeugen will, erbt man für gewöhnlich von
# `wx.Frame`
class HauptFenster(wx.Frame):
def __init__(self, parent=None, id=-1, title = "MyApp"):
# den Konstruktor von `wx.Frame` aufrufen. Danach hat deine
# Spezialisierung (abgeleitet Klasse) alle Eigenschaften von `wx.Frame`
# + denen die du hinzufügst.
wx.Frame.__init__(self, parent, id, title)
def main():
# Eine Instanz von `wx._core.PySimpleApp` erzeugen.
app = wx.PySimpleApp()
# Jetzt wird das Hauptfenster, hier instanziert!
f = HauptFenster()
# Hiermit wird "gesagt" das dass Hauptfenster angezeigt werden soll.
f.Show()
# Da nun, das Hauptfenster bestimmt worden ist (f.Show()), sagen wir jetzt
# dass die Applikation gestartet werden soll und dabei das gerade bestimmte
# Fenster `f` zum Haupotfenster macht!
app.MainLoop()
if __name__ == "__main__":
main()
Code: Alles auswählen
import wx
class HauptFenster(wx.Frame):
def __init__(self, parent=None, id=-1, title = "MyApp"):
wx.Frame.__init__(self, parent, id, title)
# Wir wollen nun ein Textfeld im Hauptfenster erzeugen.
# So, das Keyword ``parent`` erwartet eine Referenz eines
# wx Hauptfensters oder eines anderen wx Objekts (Widget) _in_ dem es
# erzeugt werden soll. Da wir wollen das es im Hauptfenster erzeugt
# wird, übergeben wir hier `self`
self.Ausgabe_Text = wx.TextCtrl(parent=self, # erwartet eine Referenz...
id=-1,
style=wx.TE_MULTILINE,
)
def main():
app = wx.PySimpleApp()
f = HauptFenster()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Code: Alles auswählen
import wx
import sys
class DebugWindow(wx.Frame):
def __init__(self, parent):
self.debug_window = wx.TextCtrl(parent=parent,
id=-1,
style=wx.TE_MULTILINE,
)
self.write = self.debug_window.AppendText
class HauptFenster(wx.Frame):
def __init__(self, parent=None, id=-1, title = "MyApp"):
wx.Frame.__init__(self, parent, id, title)
self.debug_window = DebugWindow(parent=self)
sys.stdout = self.debug_window
# Folgendes wird in `self.debug_window.debug_window`ausgegeben und nciht in der Konsole.
print >>sys.stdout, "foo"
print >>sys.stdout, "bar"
print >>sys.stdout, "spam"
print "Hello World"
for i in xrange(100):
print i,
def main():
app = wx.PySimpleApp()
f = HauptFenster()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
Code: Alles auswählen
foo
bar
spam
Hello World!
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
Code: Alles auswählen
import wx
class MyFrame(wx.Frame):
def __init__(self, parent, id, titel):
wx.Frame.__init__(self, None, -1, "title")
p = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.VERTICAL)
self.TextField = wx.TextCtrl(p, -1, "Nothing selected, yet.\n\n", size=(400,400), style=wx.TE_MULTILINE)
sizer.Add(self.TextField)
sizer2 = wx.BoxSizer(wx.HORIZONTAL)
closebutton = wx.Button(p, -1 ,"Close Me Here")
sizer2.Add(closebutton)
self.Bind(wx.EVT_BUTTON, self.OnClose, closebutton)
writebutton = wx.Button(p, -1 ,"write some text")
sizer2.Add(writebutton)
self.Bind(wx.EVT_BUTTON, self.OnWrite, writebutton)
sizer.Add(sizer2)
p.SetSizerAndFit(sizer)
self.SetClientSize(p.GetSize())
def OnClose(self, event = None):
self.Destroy()
#und andere Methoden zum Aufraeumen
def Out(self, txt):
self.TextField.WriteText(txt)
def OnWrite(self, event = None):
self.Out("etwas Text\n")
class SimpleApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, "")
frame.Show(True)
self.SetTopWindow(frame)
return True
app = SimpleApp(0)
app.MainLoop()
Es gelten die gleichen Importregeln wie sonst auch. Du kannst das Import nicht "umgehen". Was soll "die lib soll alleine auskommen" heißen? Deine Nachricht-Klasse ist kein lauffähiges Programm. Deine GUI kann mit Deiner Nachricht-Klasse arbeiten. Wenn die Nachricht-Klasse das GUI als parent hat, kann sie auch Informationen zurückgeben, aber ansonsten: Zeige doch mal den relevanten Code Deines GUIs, sage was Du machen willst und wir gehen das mal durch.Bamba hat geschrieben: Ich will in der lib (Nachricht.py) keine import Anweisungen der Gui (die lib soll alleine auskommen). Aber wie geht es das notwendige import zu umgehen?