2015-07-23 13 views
6

Sto sviluppando un'applicazione pygtk per la quale ho adottato la struttura MVC. Ma non penso di seguire lo schema MVC standard nell'implementazione.MVC per applicazione standalone che utilizza python, sqlite3 e gtk

Si prega di suggerire come devo utilizzare MVC per la seguente dichiarazione di problema.

Sto usando python, gtk, sqlite3 nella mia applicazione

problema economico per l'applicazione:
i dati sono presenti in un file di log. Dovrebbe essere estratto e mostrato in una GUI. La GUI può avere più viste (come le schede del browser) che mostrano i dati estratti dal file di log (l'utente può creare più viste dalla stessa tabella di database). Gli utenti possono filtrare/cercare i dati attraverso le viste della GUI. Le condizioni del filtro possono variare da una vista all'altra.

implementazione corrente usando la struttura MVC:
Attualmente, nella GUI, un pulsante "Create View" è presente, che su di clic, crea una vista per visualizzare i dati estratti. I dati vengono estratti (il controller estrae i dati) dal file di registro e aggiunti al database sqlite (modello). I dati dalla tabella del database sqlite vengono recuperati e aggiunti al gtk.Treemodel che lo visualizza in gtk.Treeview (View). Ogni volta che l'utente fa clic su "Crea vista", il controllore crea un'istanza della classe Visualizza e crea una nuova scheda nella GUI.

Ho creato tre classi Model, View e Controller per ottenere ciò. il Controller crea un'istanza di Modello e Vista. L'applicazione, durante l'esecuzione, istanzia Controller che continua ad attendere gli eventi della GUI (fare clic su "Crea vista" ecc. Utilizzando il ciclo principale gtk)

Qui ho bisogno di aiuto!
Ho letto che, in MVC, se il modello (database) viene modificato, anche le viste vengono modificate o viceversa. È possibile ottenere lo stesso usando sqlite3 e gtk.Treeview.

In breve, le mie domande sono:

  1. Come posso aggiornare il mio GUI applicazione mentre l'estrazione dei dati dal database? Negli esempi MVC ci sono classi Observer che richiamano le funzioni di callback quando il modello cambia. Come posso scrivere lo stesso per la dichiarazione del problema di cui sopra?
  2. Esiste comunque la possibilità di impostare il database sqlite3 come treemodel per gtk.Treeview in modo che se una riga qualsiasi viene inserita nella tabella del database viene aggiornata nella vista ad albero?
  3. C'è qualche esempio che usa l'architettura MVC ed è costruito usando python, gtk, sqlite?

Grazie in anticipo!

risposta

0

Questo è ciò che ho finalmente implementato nella mia applicazione! Per favore fatemi sapere se c'è un modo migliore per farlo.

Ho usato gtk.GenericTreeModel per mostrare i dati dal database sqlite in gtk.Treeview.

Quando l'utente fa clic su 'Fare clic su Visualizza' la vista SQLite viene creato e collegato a gtk.GenericTreeModel al fine di visualizzare i dati in gtk.Treeview (GUI).

E se i dati vengono aggiunti al database dopo aver creato la vista sqlite, per aggiornare gtk.Treeview, dobbiamo emettere il segnale "row-inserted".

Il progetto conduit da github ha un esempio per connettere sqlite a trekodel generico gtk.

Spero che questo aiuti!

0

Non so se ci sono esempi esistenti; ciò che descrivi è molto specifico del tuo problema.

Tuttavia, è possibile utilizzare la libreria Gda per ottenere una connessione al database sqlite come Gtk.TreeModel.

+0

Grazie per la risposta! Stavo cercando su google come usare gda con gtk. Ma non ho trovato nulla di relativo ad esso. Potete fornire un link o un esempio per sapere come utilizzare gda per ottenere la connessione a sqlite come gtk TreeModel. Btw sto usando gtk-2.24 con pygtk e non gtk3 – user2109788

Problemi correlati