2016-04-14 14 views
1

Ich möchte einige allgemeine Entscheidungen besprechen, die ich für mein kleines Projekt treffen muss. Es betrifft hauptsächlich den Speicherverbrauch, aber auch die Datenintegrität.Numpy Arrays und Gtk ListStores

Es ist ein Buchhaltungs-Tool, mit einer Liste von Datensätzen und berechnen einige Finanzzahlen, wie die Konten drucken, Summen auf monatlicher/vierteljährlicher Basis, Bilanz usw. berechnen ... Für die GUI verwende ich GTK, wegen der Lizenz Gründe, es ist mehr kostenlos als QT, aber beide sind auch unter Windows und MAC verfügbar.

Meine allgemeine Vorgehensweise besteht darin, die Liste der Datensätze in einem 2-dimensionalen numpy Array zu speichern. Um einen Account speziell anzuzeigen, muss ich nur eine View erstellen, die den Speicher mit dem ursprünglichen Array teilt. Also, es ist schnell und nicht speicherhungrig.

Aber um Daten in GTK3 zu zeigen, brauche ich einen ListStore. Also meine Fragen sind:

  1. die Daten aus dem numpy Array zum ListStor würde kopieren multiplizieren meines Speicher verwenden?
  2. Wenn ich die Datentabellen "bearbeitbar" anzeigen lasse, muss ich eine automatische Synchronisation zwischen dem ListStore und dem numpy Array verwalten? ?
  3. Gibt es einen anderen, eleganteren Ansatz, um zwei Tabellen (Array und ListStore) zu vermeiden?

Antwort

0

Ich bin nicht 100% sicher, ob es mit den Python GTK Bindungen möglich ist, aber GtkListStore ist eine Implementierung der GtkTreeModel Schnittstelle.

Sie können möglicherweise ein Objekt erstellen, das Ihr NumPy-Array als GtkTreeModel proxieset, indem Sie virtual methods implementieren. Zum Beispiel:

class MyListStore(object): 
    def __init__(self, ndarray): 
     self._ndarray = ndarray 

    def do_get_column_type(self, index_): 
     ... 

Synchronisieren ist ein bisschen schwieriger, wenn Sie die Tabellen editierbar machen möchten. Zumindest ist die Synchronisation vom Array zum Baummodell einfach; Wenn Sie das Signal row-changed ausgeben, wenn sich Ihr ndrarray programmatisch ändert, werden die Änderungen automatisch in Ihrer Benutzeroberfläche angezeigt. Anders herum muss es mehr manuell sein.