Wie bekomm ich die wxMDIChildFrame anzahl herraus ?

Plattformunabhängige GUIs mit wxWidgets.
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Sonntag 29. Februar 2004, 01:32

Hab das problem das ich bei meiner MDI application wissen muss wieviele wxMDIChildframes offen sind und habe bis jetzt noch keine methode gefunden, würde auch schon reichen wenn ich wüsste ob überhaupt noch ein childframe existiert
mit hochzählen finde ich ein bisschen unschön da muss es doch was besseres geben oder ?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Sonntag 29. Februar 2004, 12:54

Hi Sneaker,

ich kenn mich mit wx leider ned soo aus. Aber wenn keine spezielle Methode für die Anzahl der Childframes existiert, und die geöffneten Childframes nicht in einer Liste oder was ähnlichem eingetragen sind, wirst Du ums hochzählen nicht rumkommen.
Wenns nur darum geht, ob überhaupt noch ein Childframe existiert, ist das hochzählen ja beim ersten schon wieder beendet.


Gruß

Dookie
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Sonntag 29. Februar 2004, 14:29

Hmmm ok dann werde ich das mal machen
hab noch ne frage wie ist das EVT wenn man ein fenster focusiert ? EVT_FOCUS ???
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Sonntag 29. Februar 2004, 15:37

Da gibts wohl EVT_SET_FOCUS und EVT_KILL_FOCUS
siehe auch:
http://www.wxwindows.org/manuals/2.4.2/ ... ngoverview


Gruß

Dookie
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Sonntag 29. Februar 2004, 15:57

Ah thx die sind mir mal wieder entfallen, aber genau die hab ich gesucht :)
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Montag 1. März 2004, 04:23

Evt. ginge auch folgendes:

Code: Alles auswählen

for i in self.GetChildren():
    if isinstance(i, wxMDIChildFrame):
        z = z + 1
wobei self der wxMDIParentFrame ist und z der Anzahl der geöffneten Fenster entspricht. Die isinstance-Abfrage muss sein, da GetChildren() auch solche Sachen wie StatusBar usw. von wxMDIParentFrame mitliefert.
Vermutlich kann man das Ganze auch noch ein wenig geschickter in einer einzigen Zeile verpacken...
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 1. März 2004, 16:15

jo kann man 8)

Code: Alles auswählen

myChildFrames = [x for x in self.GetChildren() if isinstance(x, wxMDIChildFrame)]
myChildFrames enthält dann eine Liste der ChildFrames. Die Anzahl kann mit len(myChildFrames) bestimmt werden und mit einem einfachen
if myChildFrames: kann abgefragt werden ob überhaupt ChildFrames existieren.


Gruß

Dookie
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Montag 1. März 2004, 17:49

Ahh. Danke Dookie!
Hab das irgendwie nicht hinbekommen... 8)
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Montag 1. März 2004, 18:18

Habs jetzt anders gemacht ich speicher jetzt jeden wxMDIChildFrame in einer liste ab da ich beim beenden des programms noch aktionen im Child ausführen muss

edit:
Naja habs jetzt doch so gemacht wie ihr ;) dann spar ich mir die verwaltung mit der liste und die rechenzeit die dabei drauf geht kann man wohl vernachlässigen da die sowieso nur beim schliessen eines fensters anfällt

mal ne ganz andere frage ich bräuche für meine MDI Anwendung noch ein paar icons für meine toolbar kennt ihr eine seite wo man die bekommt ? oder wie ich die von windows benutzen kann ?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 1. März 2004, 19:07

am einfachsten mit google nach "toobar icons" suchen oder selber mit einem Iconeditor basteln. Oder mit dem explorer die Verzeichnisse durchstöbern.


Gruß

Dookie
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

Montag 1. März 2004, 19:15

naja ok wenn du auch keine seite kennst

so nun mal wieder ein problem
hab das mit eurem herraus finden wieviele wxMDIchilds noch existieren, bloss wenn ich das genau nach der zerstörung über .Destroy() eines childs aufrufe, existiert immer noch eine zu viel... hab jetzt überlegt den garbage collector einmal durchlaufen zu lassen, oder gibs da noch ne andere lösung ?
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Montag 1. März 2004, 22:09

Ich befürchte da gibts überhaupt keine Lösung für :?
Bevor das Fenster zerstört wird, werden erst alle Nachrichten abgearbeitet. Erst in der Freizeit (Idle) wird dann die Zerstörung ausgeführt. Leider hab ich noch keine Lösung gefunden, wie man das abwarten kann, oder wie man einfach sicherstellen kann, dass das Programm erst nach der Zerstörung fortfährt.
Jemand eine Idee?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 1. März 2004, 22:55

hmm bei Tkinter gibts dafür ein "update_idletasks" oder so.
versuchs mal mit einem wxUsleep(10)

Gruß

Dookie
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 1. März 2004, 23:07

Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Montag 1. März 2004, 23:58

Dookie hat geschrieben:hmm bei Tkinter gibts dafür ein "update_idletasks"
Das war ein guter Hinweis! Nach einigen Versuchen hab ich folgende Lösung gefunden:

Code: Alles auswählen

myChildFrames[-1].Destroy()
wxGetApp().ProcessEvent( wxIdleEvent() )
wxUsleep(10) hat leider nicht funktioniert. Vermutlich legt sich dabei der komplette Thread schlafen...

wxupdateuievent ist glaube ich zur Menüänderung. Hab ich in wxWidgets noch nie benutzt. Aber kann mich dunkel dran erinnern mich mal mit der MFC mit sowas ähnlichem rumgeärgert zu haben :wink:
Zuletzt geändert von Christopy am Dienstag 2. März 2004, 04:30, insgesamt 1-mal geändert.
Antworten