2009-07-18 3 views
0

J'ai un problème avec le toolkit wxPython. J'utilise un objet wx.GridSizer pour placer une grille affichant des informations d'état. J'ai besoin de mettre à jour cette grille, et j'ai donc trouvé quelques façons différentes de le faire. Celui que je préfère est simplement d'actualiser/mettre à jour le texte qui a besoin de la mise à jour, donc je pourrais essayer de détacher l'objet wxStaticText du calibreur, l'écraser avec un nouvel objet wxStaticText, et insérer l'objet dans le calibreur à son index précédent. Le meilleur moyen est d'utiliser la classe parente de wxGridSizer, wxSizer, qui a une méthode appelée 'Replace' qui me permettra de remplacer l'élément dans le widget sans l'enlever, et de l'insérer à nouveau. plus de slick non? Eh bien, je reçois une erreur très étrange en essayant d'utiliser cette méthode. Voici le code suivi par l'erreur:wxPython sizer La méthode de classe parente de wxGridSizer est étrangement inaccessible

self.info_sizer.Replace(self.project_value, wx.StaticText(self, wx.ID_ANY, project)) 

    self.info_sizer.Replace(self.project_value, wx.StaticText(self, wx.ID_ANY, project)) 
AttributeError: 'GridSizer' object has no attribute 'Replace' 

Alors soudainement Remplacer n'est pas une option. Gardez à l'esprit que la méthode Insert à laquelle j'ai fait référence plus haut est une méthode de la classe parente wxSizer de l'analyseur. Donc, il s'avère que le sizer im utilisant, wxGridSizer, peut appeler avec succès la méthode de sa classe parente (héritée, sous-classée) Insert.

Alors pourquoi ne puis-je pas appeler de la même manière la méthode Remplacer?

Répondre

0

Une raison pour laquelle vous ne pouvez pas utiliser wx.StaticText.SetLabel("New label") pour mettre à jour le texte?

+0

Je pensais avoir examiné cette classe pour trouver une solution. Je dois avoir manqué cette méthode. J'ai été en surcharge avec ça dernièrement. Eh bien, merci! –

+0

Ceci est une excellente solution, mais il serait toujours bon de savoir wny je ne pouvais pas accéder à une méthode de classe parent .. Je peux en utiliser un, mais pas l'autre. Mystérieux, à moins que je ne fasse quelque chose de très manifestement mal, il était très tard pour moi. –

+0

Avez-vous sous-classé wx.GridSizer? Il y a ce commentaire dans http://www.wxpython.org/docs/api/wx.Sizer-class.html qui dit: "Si vous souhaitez créer une classe sizer personnalisée dans wxPython, vous devez dériver la classe de wx.PySizer dans afin d'obtenir des fonctionnalités compatibles avec Python pour les différentes méthodes virtuelles. " –

Questions connexes