Wie bekomm ich die wxMDIChildFrame anzahl herraus ?

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

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:

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:

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:

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:

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

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:

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

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:

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:

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:

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

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:

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:

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

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.
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

und schon wieder danke an euch :)
Sneaker
User
Beiträge: 52
Registriert: Montag 19. Januar 2004, 22:19
Wohnort: Vor meinem Computer
Kontaktdaten:

So mal wieder ne frage zu wxPython und ich schreib mal meine probleme weiter hier rein dann muss ich nicht gleich 1000 neue threads erstellen...

und zwar hab ich jezt ne Toolbar mit Buttons... die Buttons erstell ich über die Methode AddSimpleTool() das problem ist das der button der dabei entsteht 3D ist und das sieht einfach dumm aus. Nun such ich eine funktion die das abstellt, hatte schon wxBitmapButtons eingefügt bloss der aufwand verdreifacht sich dadurch... jemand ne idee oder doch der umweg über wxBitmapButtons ?

edit:
hat sich schon wieder erledigt, das hängt vom betriebsystem ab ob das ding 3d oder 2d dargestellt wird
Antworten