Mixen von wx.HTML und wx.python

Plattformunabhängige GUIs mit wxWidgets.
Antworten
campinostar
User
Beiträge: 4
Registriert: Donnerstag 16. März 2006, 18:51

Hallo,

erst einmal ein Lob, ich habe schon viel gelernt, nur durch das Lesen der Beiträge und Antworten in diesem Forum.

Nun zu meinem Problem. Es geht um das Mischen von wx.HTML und wx.python, welches man auch im Demo HtmlWindow mit der Taste WITH WIDGET sich ansehen kann.

Ich habe diese ganze Sache genauso in meinem Programm eingebaut bzw. angepasst und es funktioniert auch - wie im Demo (leider). Bei mir wird beim Start sofort die HTML-Seite mit meinen Widget geladen und beim Klick auf einem Link wird wird eine andere Seite mit Widget geladen.

Leider flackert beim Laden der ersten Seite und beim Link klicken der Frame am linken oberen Rand, was sich sehr störend bemerkbar macht.

Dies kann man auch beim Demo leicht feststellen wenn man den WITH WIDGET Knopf mehrmals hintereinander
drückt. Beim Demo stellt man dabei beim genauen hinsehen fest, daß das eingebettete SCROLLEDWINDOW
Tag (vom Demo ScrolledWindow) auch links oben kurz durchscheint, bevor es sich an die richtige Position auf der Htmlseite (weiter unten) verschiebt.

Bei meinen Programm ist es genauso, nur daß mein eigenes Widget links oben erscheint und sich dann anpasst.

Durch weiteres probieren und Quellcode anschauen, habe ich festgestellt, daß dies genau in dem Moment passiert, wo das HtmlWindow erstellt wird.

Im Demo wie bei mir wird ein Frame erstellt, dann ein Panel, welcher das HtmlWindow enthält.

Es erscheint dann kurz ein Ausschnitt in der Minimalgröße
oben links im Frame, dann füllt sich dieser Auschnitt mit dem Widget und dann vergrößert sich das Fenster und die HtML-Seite wird dann erst komplett dargestellt. Dies dauert so lange, daß es ein sehr störendes Flackern bewirkt.

Wie kann ich dies verhindern ? Kann ich irgendwie feststellen, wann die Seite komplett geladen ist und dann erst das Fenster sichtbar machen. So eine Art Buffering, aber wie soll das gehen?

Ich bin für jeden Lösungsansatz dankbar, weil ich einfach nicht mehr weiterkomme.

MFG

campinostar
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

campinostar hat geschrieben:Leider flackert beim Laden der ersten Seite und beim Link klicken der Frame am linken oberen Rand, was sich sehr störend bemerkbar macht.
Hi campinostar!

Einen Thread vorher ging es um ein ähnliches oder sogar um das gleiche Problem.
http://www.python-forum.de/topic-5947.html

Folge dem Link und versuche, ob du aus den Tipps im Wiki etwas raus holen kannst. http://wiki.wxpython.org/index.cgi/Doub ... redDrawing
Ich habe es noch nicht ausprobiert, aber das was ich gelesen habe, klingt nicht schlecht. Vielleicht ist das die Lösung.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
campinostar
User
Beiträge: 4
Registriert: Donnerstag 16. März 2006, 18:51

Danke, für die schnelle Antwort. Ich hatte natürlich auch den vorherigen Thread gelesen und ich kenne auch das Prinzip des DoubleBufferedDrawing.

Bin mir aber nicht sicher, ob und wie ich dies mit dem Laden einer Webseite verknüpfen kann, da ich ja nicht direkt zeichne, sondern eine HTML-Seite lade und somit das Zeichnen ja schon geschehen ist.

Werde aber gleich Deinen im vorherigen Thread gegebenen Tip über Freeze() und Thaw() testen, den hatte ich nämlich wirklich übersehen.

MFG campinostar
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

campinostar hat geschrieben:da ich ja nicht direkt zeichne, sondern eine HTML-Seite lade und somit das Zeichnen ja schon geschehen ist.
Hi campinostar!

Ich habe es nur mal überflogen, aber für mich sehen die Beispiele (weiter unten im Wiki) so aus, als ob man das für jede Art von Window (Widget) verwenden kann. Nicht nur für einen DC.

EDIT: Nach nochmaligem überfliegen, glaube ich aber nicht mehr ganz daran, dass es für alle Widgets funktioniert. :-(
Allerdigs habe ich soeben mit Freeze und Thaw erfolgreich einige Flatterer aus meinem Programm raus bekommen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
campinostar
User
Beiträge: 4
Registriert: Donnerstag 16. März 2006, 18:51

Hallo Gerold,

gut, ich lese mir alles nochmal durch und probiere dann.

Mich wundert nur, das im Demo sogar es flackert ...
campinostar
User
Beiträge: 4
Registriert: Donnerstag 16. März 2006, 18:51

So, durch freeze() und thaw() ist es merklich besser geworden :) . Es flackert zwar noch einmal kurz, aber das Widget schimmert nicht mehr durch. Ich probiere noch ein bisschen, dies ist trotzdem schon ein großer Fortschritt.

MFG campinostar
Antworten