Wx.TextCtrl.LoadFile ()

Ich versuche, Suchergebnisdaten schnell anzuzeigen. Ich habe alle absoluten Dateipfade für Dateien auf meinem Netzlaufwerk (s) in einer einzigen, ~ 50MB Textdatei. Das Python-Skript macht einen einzigen Durchlauf über jede Zeile in dieser Datei [auf dem lokalen Laufwerk] in einer Sekunde oder weniger gehalten, und das ist akzeptabel. Das ist die Zeit, die es braucht, um Ergebnisse zu sammeln.

Allerdings sind die Ergebnisse in einem wx.TextCtrl-Widget angegeben. Anhängen sie Zeile für Zeile zu einem wx TextCtrl wäre lächerlich. Die beste Methode, die ich gefunden habe, ist, die Ergebnisse in eine Textdatei zu schreiben, und ruf wx.TextCtrls LoadFile native an, die je nach Anzahl der Ergebnisse die Textzeilen in den Bereich zwischen 0,1 und 5 Sekunden lädt oder damit. Allerdings muss es einen schnelleren Weg für 10 + MB von Text eingehen. Die Ergebnisse werden sofort berechnet und in der gleichen Prozess wie die GUI … so bitte, sagen Sie mir, gibt es irgendwie kann ich Rohr / Proxy / hack diese Daten direkt in die TextCtrl? Würde mmap diesem Transfer helfen?

2 Solutions collect form web for “Wx.TextCtrl.LoadFile ()”

Sind die Leute wirklich zu lesen (oder brauchen) alle 10MB in einem Text-Steuerelement? Wahrscheinlich nicht.

Schlagen Sie vor, dass Sie auf Nachfrage durch Paging in Teilen der Daten laden.

Oder besser noch, bieten einige Benutzer-Suchfunktionalität, die die Ergebnisse auf die Informationen von Interesse verengt.

Sie können alle Daten sofort mit AppendText laden, warum Sie es Zeile für Zeile machen müssen, aber trotzdem wird es Sekunden dauern, da 10MB riesig ist. Wenn du wx.RichTextCtrl benutzt hast, ist es in meinem Test schnell schneller 10 MB in 6 Sek. Anstelle von 9 Sek. Für TextCtrl.

Ich sehe nicht den Grund, warum du alle Daten sofort einstellen musst? Und wer wird 10MB lesen?

So je nach dem Zweck kann es bessere Wege geben.

Wenn Sie alle Daten in super schneller Weise anzeigen müssen, schreiben Sie ein benutzerdefiniertes Steuerelement, das eine Liste von Zeilen beibehält und nur die Zeilen in der Ansicht sichtbar macht.

Hier ist eine Test-App, wo man verschiedene Dinge ausprobieren kann

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

Wenn du nicht alles in einer benutzerdefinierten Kontrolle malen willst, kannst du einfach eine Textzeile mit separater Bildlaufleiste verwenden und Text von Textcntrl beim Scrollen aktualisieren, also wirst du nur wenige Zeilen laden.

Bearbeiten: Wie du in deinem Kommentar gesagt hast, dass Daten 1-2 MB sein können, dauert 1MB Daten mit AppendText nur .5 sec Ich denke das ist okay

  • WxPython: Anzeige mehrerer Widgets im gleichen Frame
  • Wx.TaskBarIcon auf Ubuntu 11.04
  • WxPython / ReportLab: So erstellen und öffnen Sie eine .pdf-Datei auf Knopf geklickt
  • WxPython minimale Größe von Frame mit einem Panel
  • Steuern von UI-Elementen in wxPython mit Threading
  • Wie macht man Auto Scrolling wx.grid Tabelle?
  • WxPython: Textausrichtung funktioniert nicht
  • Holen Sie den Wert des wxpython-Schiebereglers unter Mausklick
  • Verwenden von GUIs in Python auf einer Online-IDE?
  • WxPython Fenster Maximieren / Wiederherstellen
  • Focus-folgt-Maus in wxPython?
  • Python ist die beste Programmiersprache der Welt.