2010-11-23 4 views
0

Pour une application wxPython que je crée, j'ai besoin qu'il y ait une variable qui compte le nombre de cycles que le programme traverse. J'ai plusieurs panneaux qui sont définis dans leur propre classe. La classe frame crée une instance de tous et les panneaux sont affichés ou masqués en fonction des boutons sur lesquels l'utilisateur clique. Pour la majeure partie du programme, le "jeu" tourne à travers trois panneaux (que j'appellerai p1, p2 et p3). Lorsque vous atteignez p3, le programme vous ramène à p1 * \ si vous avez parcouru le cycle pendant un certain temps. En outre, il garde la trace des autres données lors de l'exécution du programme. Mon problème est que je ne suis pas sûr de savoir comment garder une trace de ces données. J'ai essayé d'avoir des variables de classe dans ma classe d'image qui seraient supposées être accessibles à tous les panneaux en utilisant la méthode GetParent() mais j'ai eu peu de chance avec cette approche. J'ai aussi essayé d'utiliser des variables globales mais cela a aussi conduit à une impasse. Toute information sur la façon dont je pourrais éventuellement accomplir cela serait grandement appréciée.wxPython global counter

Répondre

0

Je ne vois aucune raison pour laquelle les variables globales ne fonctionneraient pas à moins que vous ne reproduisiez des sous-processus. Pour éviter d'avoir à déclarer les globals, placez-les dans un objet comme un dict:


myglobals = {'count': 0} 
class whatever: 
def blather(): 
    myglobals['count'] += 1 
+0

Lorsque je mets à jour l'un des globals d'un panneau, il ne peut pas être reporté sur un autre panneau. Dans un de mes panneaux, je dis de mettre à jour le compte quand l'utilisateur appuie sur un bouton, et dans un autre je veux accéder au compte actuel. Quand je fais cela, je reçois seulement le nombre initial que le compte a été réglé. Mais dans le panneau où je fais l'incrément, je suis capable de voir ce que le compte est. Une idée sur pourquoi cela pourrait arriver? (j'espère que je l'ai expliqué correctement) – grassclip

+0

Oui, wxPython peut exécuter chaque panneau dans un sous-processus. Ensuite, vous devrez faire une certaine communication interprocessus. Je ne suis pas sûr de ce qui fonctionnerait le mieux pour ça. Mémoire partagée, peut-être. –

+0

ahh j'ai compris le problème. J'utilise du texte statique pour représenter ce que je veux, et cela signifie que le texte est ... statique. Je vais juste devoir trouver un moyen de mettre à jour le texte chaque fois que je réaffiche le panneau. De plus, j'utilisais incorrectement mes variables globales et je ne connaissais pas la structure dict donc merci beaucoup pour votre aide. Très appréciée. – grassclip