Hallo zusammen!
Nachdem ich mich nun ein paar Tage eingelesen habe, beschloss ich, auch selbst einmal eine Frage zu stellen.
Ich verwende wxPython 2.6 und GNU/Linux Ubuntu 5.10.
Einige wxPython-Tutorials habe ich bereits durchgearbeitet und einige kleine Applikationen erstellt. Ist meine erste Erfahrung mit Python und ich bin positiv überrascht.
Probiere jetzt schon seit längerer Zeit, ein zweites Fenster zu dem Hauptfenster einer einfachen Applikation zu erstellen, und zwar als Child-Objekt. Als Basis benutzte ich dafür den berühmten "simplen Texteditor".
(Grundlegende Programmierkenntnisse sind vorhanden)
Wenn da jemand einen Hinweis parat hat, würde ich ihn sehr gerne hören
Grüße
Klip
Neues Fenster als child-Objekt
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Klip!Klip hat geschrieben:Probiere jetzt schon seit längerer Zeit, ein zweites Fenster zu dem Hauptfenster einer einfachen Applikation zu erstellen, und zwar als Child-Objekt.
Willkommen im Python-Forum!
Mir ist nicht ganz klar, was du als Child-Objekt verstehst. Möchtest du ein Fenster in ein anderes Fenster einbinden, oder möchtest du ein zweites (modales) Fenster aufmachen, das ober dem ersten Fenster steht? -- So dass man im ersten Fenster erst wieder etwas tun kann, wenn man das zweite Fenster geschlossen hat.
Für ersten Fall, empfehle ich mehrere ``wx.Panel`` zu erstellen, welche du je nach Bedarf im ``wx.Frame`` anzeigen kannst.
Für zweiten Fall, gibt es zuerst mal ``wx.Dialog``, das ähnlich wie ein Frame zu verwenden ist. Der Unterschied ist, dass du einen Dialog über die Methode ``ShowModal()`` aufrufen kannst. --> Der Code bleibt an dieser Stelle stehen, bis das Dialog-Fenster wieder geschlossen wurde.
Dann gibt es noch die Möglichkeit, ein ``wx.Frame``-Objekt *modal* zu machen. Das geht mit der Methode ``MakeModal()``. (Siehe auch: http://www.python-forum.de/post-39104.html#39104 )
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Das zweite Fenster soll schon "außerhalb" des ersten Fensters erscheinen, aber man soll auch weiterhin das erste Fenster nutzen können, so meinte ich das. Tut mir leid, wenn es nicht klar ersichtlich war .
Danke für die Hinweise. Ich setze mich mal enger mit den genannten Funktionen auseinander. Wenn ich Erfolg habe oder verzweifle, melde ich mich nochmal
Danke für die Hinweise. Ich setze mich mal enger mit den genannten Funktionen auseinander. Wenn ich Erfolg habe oder verzweifle, melde ich mich nochmal
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Klip!Klip hat geschrieben:Das zweite Fenster soll schon "außerhalb" des ersten Fensters erscheinen, aber man soll auch weiterhin das erste Fenster nutzen können
Hier ist ein Beispiel das genau so funktioniert:
EDIT: Code ausgelagert: http://paste.pocoo.org/show/89659/
mfg
Gerold
Zuletzt geändert von gerold am Freitag 31. Oktober 2008, 12:54, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Danke für die schnelle Hilfe, gerold!
Ich habe verstanden, wie es funktioniert. Bin gerade dabei, mein Programm zu modifizieren.
EDIT: Es hat geklappt! Mein Programm läuft jetzt genau so, wie ich es mir vorgestellt habe! Nochmals ein Dankeschön an dich.
Grüße
Klip
Ich habe verstanden, wie es funktioniert. Bin gerade dabei, mein Programm zu modifizieren.
EDIT: Es hat geklappt! Mein Programm läuft jetzt genau so, wie ich es mir vorgestellt habe! Nochmals ein Dankeschön an dich.
Grüße
Klip
Wennn ich den Thread noch mal ausgraben darf:
wieso kann ich mit z.B.
kein Framefüllendes Basispanel erzeugen??
wieso kann ich mit z.B.
Code: Alles auswählen
class MyAdditionalFrame(wx.Frame):
"""
Frame-Klasse für die Fenster, die vom Haupt-Frame aus geöffnet werden.
"""
def __init__(self, parent = None, id = -1, title = "Neues Frame"):
"""
Initialisiert das zusätzliche Frame und baut es auf
"""
wx.Frame.__init__(self, parent, id, title)
# -> erzeugen des Basispanels für das zusätzliche Frame ?
panel = wx.Panel(self)
lab = wx.StaticText(self, -1, "Ich bin ein neues Fenster (Frame)")
self.Show()
Zuletzt geändert von mathi am Freitag 31. Oktober 2008, 12:54, insgesamt 1-mal geändert.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo mathi!mathi hat geschrieben:Code: Alles auswählen
lab = wx.StaticText(self, -1, "Ich bin ein neues Fenster (Frame)")
Ich verstehe deine Frage nicht. Außerdem ist in deinem beispiel etwas falsch. Du legst das StaticText-Widget nicht in das Panel, sondern in den Frame. Damit ist das Panel nicht mehr das einzige Widget im Frame. Und nur wenn ein Widget das **einzige** Widget im Frame ist, füllt es automatisch den ganzen Platz aus.
Besser:
Code: Alles auswählen
lab = wx.StaticText(panel, -1, "Ich bin ein neues Fenster (Frame)")
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Alle,
da hatte Jemand den gleichen Wunsch wie ich vor 2 Jahren.
Schön zu hören.
Ok ich habe von Gerold die Idee übernommen, nur macht er bei mir das neue Frame nur einmal auf. Beim zweiten und weiteren öffnen erscheint kein neues Frame. Hat da vielleicht Jemand eine Idee was ich falsch mache ?
Mein code sieht so aus.
Fehlermeldungen gibt es keine, allerdings wird das Settings Fenster gleich zu Beginn des Starts der Applikation gestartet.
Grüße Markus
da hatte Jemand den gleichen Wunsch wie ich vor 2 Jahren.
Schön zu hören.
Ok ich habe von Gerold die Idee übernommen, nur macht er bei mir das neue Frame nur einmal auf. Beim zweiten und weiteren öffnen erscheint kein neues Frame. Hat da vielleicht Jemand eine Idee was ich falsch mache ?
Mein code sieht so aus.
Code: Alles auswählen
class HistoFrame(wx.Frame):
def __init__(self,starttime,endtime,timescale,peaks_found,
times_peaks_appeared,*args,**kwargs):
. . .
self.settings = wx.MenuItem(self.optMenu,301,'&Settings',
'Show and save Settings.')
self.Bind(wx.EVT_MENU,self.runSettings(self),id=301)
. . .
def runSettings(self,parent):
settingWindow = Settings(parent)
settingWindow.Show()
class Settings(wx.Frame):
def __init__(self,parent,id=-1,title='Settings',*args,**kwargs):
wx.Frame.__init__(self,parent,id,title,*args,**kwargs)
self.Bind(wx.EVT_CLOSE,self.onQuit)
def onQuit(self,event):
self.Destroy()
Grüße Markus
Zuletzt geändert von feldmaus am Donnerstag 25. Juni 2009, 20:58, insgesamt 2-mal geändert.
Ich habe gerade noch was gefunden,
http://www.python-forum.de/topic-1552.h ... terfenster
Allerdings habe ich das auch nicht hinbekommen mit deren Lösung.
Wie nennt sich denn das event welches das Fenster schließt ?
Ok ich habe mal was bei meinem Code oben hinzugefügt.
http://www.python-forum.de/topic-1552.h ... terfenster
Allerdings habe ich das auch nicht hinbekommen mit deren Lösung.
Wie nennt sich denn das event welches das Fenster schließt ?
Ok ich habe mal was bei meinem Code oben hinzugefügt.
Ich habe meinen Fehler gefunden. Also der code sollte so aussehen.
Der Fehler ist, dass ich die Klammer hatte. Ohne Klammer scheint es zu funktionieren. Mit Klammer meine ich Zeile 7.
Wäre schön wenn ein Spezialist mal den Unterschied erklären könnte. Also was das aus macht, ob man
self.Bind(wx.EVT_MENU,self.runSettings(),id=301)
oder
self.Bind(wx.EVT_MENU,self.runSettings,id=301)
schreibt.
Grüße Markus
Code: Alles auswählen
class HistoFrame(wx.Frame):
def __init__(self,starttime,endtime,timescale,peaks_found,
times_peaks_appeared,*args,**kwargs):
. . .
self.settings = wx.MenuItem(self.optMenu,301,'&Settings',
'Show and save Settings.')
self.Bind(wx.EVT_MENU,self.runSettings,id=301)
. . .
def runSettings(self,event):
settingWindow = Settings(self)
settingWindow.Show(True)
class Settings(wx.Frame):
def __init__(self,parent,id=-1,title='Settings',*args,**kwargs):
wx.Frame.__init__(self,parent,id,title,*args,**kwargs)
self.Bind(wx.EVT_CLOSE,self.onQuit)
def onQuit(self,event):
self.Destroy()
Wäre schön wenn ein Spezialist mal den Unterschied erklären könnte. Also was das aus macht, ob man
self.Bind(wx.EVT_MENU,self.runSettings(),id=301)
oder
self.Bind(wx.EVT_MENU,self.runSettings,id=301)
schreibt.
Grüße Markus