Pregunta

Estoy trabajando en un programa de interfaz gráfica de usuario, y utilizar AppendText al estado de actualización en un cuadro de texto de varias líneas (hecho de wx.TextCtrl). Me di cuenta cada vez que hay una nueva línea escrita en esta caja, en lugar de añadir sin problemas esta línea al final, todo el texto en el cuadro de simplemente desaparecen (no en el real, sólo visualmente) y tengo que haga clic en el botón de desplazamiento para comprobar el recién actualizado línea de estado / escrito. ¿Por qué esta pasando? ¿Debo agregar algunos estilos? Es de esperar que ustedes me puede ayudar.

Aquí está mi código de ejemplo:

import wx
import thread
import time

class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, id = -1, title = "Testing", pos=(350, 110), size=(490,530), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX)
        panel = wx.Panel(self)

        self.StartButton = wx.Button(parent = panel, id = -1, label = "Start", pos = (110, 17), size = (50, 20))
        self.MultiLine = wx.TextCtrl(parent = panel, id = -1, pos = (38, 70), size = (410, 90), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_AUTO_URL)

        self.Bind(wx.EVT_BUTTON, self.OnStart, self.StartButton)

    def OnStart(self, event):
        self.StartButton.Disable()
        thread.start_new_thread(self.LongRunning, ())

    def LongRunning(self):
        Counter = 1
        while True:
            self.MultiLine.AppendText("Hi," + str(Counter) + "\n")
            Counter = Counter + 1
            time.sleep(2)


class TestApp(wx.App):
    def OnInit(self):
        self.TestFrame = TestFrame()
        self.TestFrame.Show()
        self.SetTopWindow(self.TestFrame)
        return True

def main():
    App = TestApp(redirect = False)
    App.MainLoop()

if __name__ == "__main__":
    main()
¿Fue útil?

Solución

Trate de llamar al método Refresh() en el textCtrl

Actualización:

Una pregunta ya ha sido formulada con respecto a este problema, aquí es la respuesta que más o menos lo resuelve, no -ITS perfecto, pero tal vez usted puede mejorar en él ...

Aquí es un hilo de la wxpython lista de correo en relación con el problema que también puede ser de interés para usted.

Otros consejos

intente lo siguiente:

self.logs = wx.TextCtrl(self, id=-1, value='', pos=wx.DefaultPosition,
                            size=(-1,300),
                            style= wx.TE_MULTILINE | wx.SUNKEN_BORDER)
self.logs.AppendText(text + "\n")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top