Hallo alle zusammen,
ich bastle gerade an einem Memory-Spiel. Die Karten sind Bilder, die ich auf vielen kleinen Panels abbilde. Diese Panels liegen ihrerseits wieder auf einem Panel, das sich im Hauptrahmen befindet (ich verwende keine Sizer, weil ich noch nicht ganz kapiert habe, wie ich die benutze und was ich damit tu, aber das will ich hier und jetzt auch gar nicht lernen ).
So, zum Problem:
Wenn das Spiel ganz oder teilweise durch ein anderes Fenster verdeckt worden ist, sind die bisher aufgedeckten Karten nicht mehr zu sehen. Ein Refresh wird notwendig. Nur, wann?
Ich hatte gedacht, daß das Hauptfenster mitbekommt, wenn es von einem anderen verdeckt wird oder zumindest mitbekommt, wenn es wieder den Focus bekommt. Aber das scheint nicht so einfach zu sein.
Fragen:
- Ist das Warten auf den Focus die richtige Methode?
- Wenn ja, müssen alle Panels für sich prüfen, ob sie den Focus haben und das dann an das Hauptfenster weiterleiten?
- Gibt es ein System Refresh-Event, wenn ja, wie wird es genutzt?
Danke für Eure Hilfe,
Christoph
Refresh und Focus
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Christoph!ChrisGTJ hat geschrieben:Wenn das Spiel ganz oder teilweise durch ein anderes Fenster verdeckt worden ist, sind die bisher aufgedeckten Karten nicht mehr zu sehen.
Das funktioniert normalerweise automatisch, wenn du das Paint-Ereignis zum Zeichnen verwendest. Ich vermute einen Fehler in deinem Code. Wenn du noch nicht so weit bist, dann nimm lieber ``wx.StaticBitmap``. Das kümmert sich selbst darum, dass die Bilder immer sichtbar sind.
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.
Hallo Gerold,
danke für die Antwort. Ich habe mal nach dem StaticBitmap gesucht und bin auf den folgenden Therad gestoßen:
http://www.python-forum.de/topic-8794.h ... aticbitmap
Ich habe Dein Beispiel abgekupfert und sehr vereinfacht (weil ich eh noch ein Bildchen vergrößert darstellen wollte) und habe dann das Paint Event gebunden:
self.mainPanel.Bind(wx.EVT_PAINT, self.onPaint)
Das macht dem armen Rechner aber mächtig Streß, richtig? Vollauslastung, weil das Event dauernd ankommt. In dem abgespeckten Beispiel von Dir ist das natürlich nicht so, da beibt der Rechner unbeeindruckt.
Ich habe es dann so geändert, daß ich für jede Karte, sobald sie aufgedeckt ist, das Paint-Event an ihr Panel binde. Die Bindung wird gelöst, wenn die Karte wieder verdeckt oder gelöscht wird. Trotzdem wird es scheinbar anstrengend für den Rechner (klar, je mehr Karten aufgedeckt sind...). Kann man da was tun?
Gruß und Danke,
Christoph
danke für die Antwort. Ich habe mal nach dem StaticBitmap gesucht und bin auf den folgenden Therad gestoßen:
http://www.python-forum.de/topic-8794.h ... aticbitmap
Ich habe Dein Beispiel abgekupfert und sehr vereinfacht (weil ich eh noch ein Bildchen vergrößert darstellen wollte) und habe dann das Paint Event gebunden:
self.mainPanel.Bind(wx.EVT_PAINT, self.onPaint)
Das macht dem armen Rechner aber mächtig Streß, richtig? Vollauslastung, weil das Event dauernd ankommt. In dem abgespeckten Beispiel von Dir ist das natürlich nicht so, da beibt der Rechner unbeeindruckt.
Ich habe es dann so geändert, daß ich für jede Karte, sobald sie aufgedeckt ist, das Paint-Event an ihr Panel binde. Die Bindung wird gelöst, wenn die Karte wieder verdeckt oder gelöscht wird. Trotzdem wird es scheinbar anstrengend für den Rechner (klar, je mehr Karten aufgedeckt sind...). Kann man da was tun?
Gruß und Danke,
Christoph
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Christoph!ChrisGTJ hat geschrieben:Ich habe Dein Beispiel abgekupfert und sehr vereinfacht (weil ich eh noch ein Bildchen vergrößert darstellen wollte) und habe dann das Paint Event gebunden
Wenn du wx.StaticBitmap verwendest, dann brauchst du das Paint-Ereignis nicht mehr. Du übergibtst beim Erstellen des wx.StaticBitmap den Pfad zur Bilddatei und schon hast du ein Bild, das du irgendwohin legen kannst. Um das Neuzeichnen kümmert sich wxPython selbst.
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.