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.