您可以使用 AppendText 一次加载所有数据,为什么需要逐行加载,但仍然需要几秒钟,因为 10MB 很大。如果您使用 wx.RichTextCtrl,它在我的测试中会更快一些,它在 6 秒内加载 10 MB,而不是 TextCtrl 的 9 秒。
我看不出您需要一次设置所有数据的原因?谁会读 10MB?
因此,根据目的,可以有更好的方法。
如果您需要以超快的方式显示所有数据,请编写一个自定义控件,该控件保留行列表并仅将行呈现在视图中可见。
这是一个测试应用程序,您可以在其中尝试各种事情
import wx
import wx.richtext
import string
import time
# create a big text
line = string.ascii_letters+"\n"
bigText = line*200000
app = wx.PySimpleApp()
myframe = wx.Frame(None)
#tc = wx.TextCtrl(myframe, style=wx.TE_MULTILINE)
tc = wx.richtext.RichTextCtrl(myframe)
def loadData():
s = time.time()
tc.SetMaxLength(len(bigText))
tc.AppendText(bigText)
print time.time()-s
# load big text after 5 secs
wx.CallLater(5000, loadData)
app.SetTopWindow(myframe)
myframe.Show()
app.MainLoop()
如果您不想在自定义控件中自己绘制所有内容,则可以只使用带有单独滚动条的 textctrl 并在滚动时更新 textcntrl 的文本,因此一次您将只加载几行。
编辑:正如您在评论中所说的数据可能是 1-2 MB,带有 AppendText 的 1MB 数据只需要 0.5 秒我认为没关系