2010-08-25 2 views
2

Я работаю над программой GUI, и я использую AppendText для обновления статуса в многострочном текстовом поле (из wx.TextCtrl). Я заметил, что каждый раз, когда в этом поле появляется новая строка, вместо того, чтобы плавно добавлять эту строку до конца, все тексты в поле просто исчезают (не в реальном, просто визуально), и я должен нажать кнопку прокрутки, чтобы проверить новая обновленная/записанная строка состояния. Почему это происходит? Должен ли я добавлять некоторые стили? Надеюсь, вы, ребята, можете мне помочь.Как сделать многострочное текстовое обновление wx.TextCtrl плавно?

Вот мой пример кода:

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() 

ответ

2

Попробуйте вызвать метод Refresh() на textCtrl

Update:

вопрос имеет ALRE ади спросили об этой проблеме, here - это ответ, который в значительной степени решает его, - не идеально, но, может быть, вы можете улучшить его ...

Here является нитью из списка рассылки wxpython относительно проблемы, которая может также вас интересует.

+0

Это не работает ... Я по-прежнему пуста и должен использовать полосу прокрутки, чтобы проверить статус ... – Shane

+0

Если вы можете добавить runnable sample, то это не должно заставлять меня или кого-то еще долго ждать, или что-то не так. Без кода его игра-гадание! – volting

+0

Я только что добавил свой код, пожалуйста, посмотрите его. :) – Shane

1

попробовать это:

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") 
+0

Не работает ни ... Кто-нибудь может помочь? – Shane