2009-01-16 8 views
2

J'utilise un wx.TextCtrl au texte de sortie d'un démon réseau.
Comme la sortie est assez verbeuse, la taille du texte dans le TextCtrl peut devenir énorme (BTW y a-t-il une limitation sur la taille du contenu d'un TextCtrl?)
Je voudrais supprimer les N lignes supérieures du TextCtrl lorsque TextCtrl.GetNumberOfLines() dépasse un seuil prédéfini. Quelle est la meilleure façon d'y parvenir?lignes de wx.TextCtrl Suppression

Répondre

1

Le SetMaxLength reference dit que la limitation dépend du contrôle de texte natif sous-jacent, mais devrait être au moins 32 Ko.

A propos de la suppression des lignes N top, vous pouvez essayer d'appeler GetLineLength pour 0..N-1, calculer la somme S puis appelez Remove (0, S)

+0

Merci. C'est ce que je suis venu avec: deleteLines def (auto, numLines): size = 0 pour i dans la gamme (numLines): self.outputdevice.Remove (0, self.outputdevice.GetLineLength (0)) –

+0

Oui , cela semble bon, supprime le besoin de calcul de la somme. – schnaader

+2

Je compare la performance d'appeler N fois getLineLength() et 1 fois remove() vs appeler N fois Supprimer * et * N fois GetLineLength(). Juste pour la référence. – Abgan

0

Que diriez-vous de la méthode Remove de wx.TextCtrl?

Chaque fois que vous êtes sur le point d'ajouter un nouveau texte, vous pouvez vérifier si le texte actuel semble trop long et supprimer certains dès le début.

0

Supprimer() devrait faire l'affaire.

TextCtrl sans drapeau wx.TE_RICH ne peut pas avoir plus de 64 Ko sur Windows.

0

Vous devriez pouvoir utiliser wx.TextCtrl.PositionToXY() et wx.TextCtrl.XYToPosition() pour convertir la position (mesurée en caractères depuis le début) vers et à partir d'une paire (column, line_num).

Ainsi, vous pouvez utiliser i = wx.TextCtrl.XYToPosition(0, n) pour obtenir la position i d'une ligne particulière n (ou n + 1, selon la façon dont vous comptez les ou à base de 1 0--), puis appelez wx.TextCtrl.Remove(0, i) pour enlever la premier n lignes.

Questions connexes