Frage

Ich arbeite an einem GUI-Programm, und ich verwende AppendText zum Update-Status in einem Textfeld mit mehreren Leitungen (aus wx.TextCtrl). Ich bemerkte, jedes Mal gibt es eine neue Zeile in diesem Feld geschrieben, statt glatt diese Zeile am Ende hinzufügen, die ganzen Texte in der Box einfach verschwinden (nicht real, nur visuell) und ich habe die Scroll-Taste klicken, um die zu prüfen neu aktualisiert / geschrieben Statuszeile. Warum geschieht das? Sollte ich etwas Arten hinzufügen? Hoffentlich ihr könnt mir helfen.

Hier ist mein Beispielcode:

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()
War es hilfreich?

Lösung

Versuchen Sie, die Refresh() Methode auf dem textCtrl Aufruf

Update:

hat eine Frage bereits aufgefordert worden, in Bezug auf dieses Problem, hier ist die Antwort, die so ziemlich löst es, nicht perfekt -seine aber vielleicht können Sie verbessern drauf ...

Hier ist ein Thread aus dem wxpython Mailing-Liste in Bezug auf das Problem, das auch für Sie von Interesse sein kann.

Andere Tipps

versuchen, diese:

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")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top