2009-11-04 5 views
0

Cela peut être évident, mais il me manque. Je travaille dans wxpython.Comment faire pour supprimer un champ d'un wxStatusBar

J'ai un wxStatusBar avec plusieurs champs (ces champs ont du texte ainsi que d'autres widgets). Je dois être en mesure d'ajouter et de supprimer ces champs tout au long de la session de l'application. Est-il possible de supprimer des champs d'une barre d'état ou dois-je simplement la redessiner? Je pense que pour faire ce dernier je pourrais utiliser la fonction SetFields(), mais je ne suis pas sûr du type de liste à donner à SetFields() ... le seul exemple que j'ai vu lui donne une liste de chaînes, mais je avoir plus que des cordes pour le passer.

Merci d'avance!

Répondre

1

Vous pouvez réduire le nombre de champs en appelant mystatusbar.SetFieldsCount(numfields). Les redéfinir si vous le souhaitez avec .SetStatusWidths([list]). Changer le texte à des positions individuelles en utilisant .SetStatusText('string', position). Si vous avez un contrôle (par exemple une case à cocher) masqué dans une section de la barre d'état, vous pouvez le déplacer vers l'emplacement donné par .GetFieldRect(position). Appelez ceci sur wx.EVT_SIZE ou chaque fois que vous supprimez/éliminez des choses.

Si vous supprimez des champs d'un endroit autre que la fin (indice le plus élevé), vous devrez d'abord déplacer vos données manuellement. Vous avez mentionné que vous utilisiez .SetFields(), il suffit de prendre la liste que vous avez passée plus tôt et .pop() sur celle que vous ne voulez pas.

Une partie du code de repositionnement de wxPython Démo:

# reposition the checkbox 
def Reposition(self): 
    rect = self.GetFieldRect(1) # the checkbox lives in the 2nd (index 1) slot 
    self.cb.SetPosition((rect.x+2, rect.y+2)) 
    self.cb.SetSize((rect.width-4, rect.height-4)) 
    self.sizeChanged = False 

Regardez dans le wxPython Demo app pour un exemple de code que vous pouvez pirater rapidement et courir à partir de l'intérieur.

Questions connexes