Вы можете загрузить все данные одновременно с AppendText, поэтому вам нужно делать это построчно, но все равно это займет несколько секунд, так как 10 МБ огромно. Если вы используете wx.RichTextCtrl, это немного быстрее
в моем тесте он загрузил 10 МБ за 6 секунд вместо 9 секунд для TextCtrl.
Не вижу причины, по которой вам нужно установить все данные сразу? а кто будет читать 10Мб?
Так что в зависимости от цели могут быть лучшие способы.
Если вам нужно отобразить все данные очень быстро, напишите пользовательский элемент управления, который хранит список строк и отображает только те строки, которые видны в представлении.
вот тестовое приложение, в котором вы можете попробовать различные вещи
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 МБ, данные 1 МБ с AppendText занимают всего 0,5 секунды. Я думаю, что это нормально