2013-05-04 5 views
0

J'essaie d'afficher un très grand carte dans une fenêtre déroulante. L'idée est que vous avez une grille de carreaux carrés avec une image pour chaque tuile et vous pouvez faire défiler pour les voir. Chaque tuile contient également des informations numériques (je peux dessiner ceci avec un wx.StaticText), et vous pouvez cliquer et faire un clic droit sur les tuiles pour effectuer certaines actions.Très grand rendu wx.ScrolledPanel

Mon premier passage a été d'utiliser wx.Panel pour chaque tuile et wx.ScrolledWindow pour la carte. Cependant, wx.ScrolledWindow semble avoir de très mauvaises performances avec un grand nombre de tuiles (défilement à environ 4fps).

Ma prochaine tentative a été d'utiliser un flyweight pattern en ayant exactement 9 grands panneaux qui rendent environ une centaine de tuiles en utilisant wx.dc. Au fur et à mesure que l'utilisateur défile dans une direction et que les panneaux quittent l'écran, je les ajoute à une zone morte et reconfigure les nouveaux panneaux à partir du bloc d'attente. Cependant, cela ne semble pas particulièrement bien fonctionner, car il y a un scintillement important chaque fois qu'un panneau est repositionné. Il semble également que les panneaux à l'intérieur d'une fenêtre wx.ScrolledWindow soient positionnés (par exemple panel.SetPosition(...)) en fonction de la position de défilement actuelle plutôt que de l'origine de l'espace virtuel, ce qui rend difficile l'évitement des conditions de course. sont encore en cours de reconfiguration.

Quel est le modèle recommandé pour afficher un très grand contenu de défilement dans wxPython? Je suis familier avec un moyen d'y parvenir dans mon WM natif, et j'ai vu fairly large scroll areas implémenté dans wxWidgets. Mais il ne semble pas y avoir d'exemples pour le contenu de défilement important pour wxPython.

Répondre

0

Apparemment, le meilleur moyen de faire défiler du contenu volumineux est avec wx.lib.floatcanvas. Il y a une démo raisonnable on GitHub. Ce n'est pas tout à fait la vitesse native, mais il est utilisable même sur les grandes tailles de graphe.

Je n'ai pas compris comment faire le panoramique multitouch 2D que le scroller natif (sur Mac) prend en charge, car il ne semble pas apparaître dans les événements MouseWheel. Cela pourrait être un inconvénient si c'est important pour quelqu'un, mais ce n'est pas la fin du monde pour mon projet.

Questions connexes