Domanda

Sto lavorando su un programma di grafica, e uso AppendText per aggiornare lo stato in una casella di testo su più righe (fatto di wx.TextCtrl). Ho notato ogni volta che c'è una nuova linea di scritto in questo box, invece di intoppi aggiungendo questa linea fino alla fine, tutto il testo nella casella di scomparire (non in real, solo visivamente) e devo fare clic sul pulsante di scorrimento per controllare il recentemente aggiornato / riga di stato scritta. Perché questo accade? Devo aggiungere alcuni stili? Speriamo che voi ragazzi mi può dare una mano.

Ecco il mio codice di esempio:

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()
È stato utile?

Soluzione

Prova a chiamare il metodo Refresh() sul textCtrl

Aggiornamento:

Una domanda è già stata posta per quanto riguarda questo problema, qui è la risposta che più o meno lo risolve, non -La sua perfetta ma forse si può migliorare su di esso ...

Qui è un thread dal wxPython mailing list per quanto riguarda il problema che può anche essere di interesse per voi.

Altri suggerimenti

provare questo:

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")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top