代码之家  ›  专栏  ›  技术社区  ›  Shane

我该怎么做wx.TextCtrl文件多行文本是否顺利更新?

  •  2
  • Shane  · 技术社区  · 14 年前

    我正在开发一个GUI程序,我使用AppendText来更新多行文本框(由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 回复  |  直到 14 年前
        1
  •  2
  •   Community dbr    7 年前

    试着打电话给 Refresh() 上的方法 textCtrl

    关于这个问题已经有人问过了, here 答案很好地解决了这个问题,-它并不完美,但也许你可以改进它。。。

    Here

        2
  •  2
  •   CarolusPl    14 年前

    试试这个:

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