Sto provando a suddividere il mio codice in diversi livelli: GUI, lettura della GUI, creazione di input, calcolo del modello, interpretazione dei dati, creazione di viste, invio della vista alla GUI. Qualcuno mi ha parlato di MVC e mi piacerebbe provare a costruire il mio programma in questo modo. Ma sono un po 'confuso su come scambiare informazioni tra quei moduli. Sto incontrando problemi con nomi globali indefiniti e così via. Il mio modello è scritto in MATLAB e consiste in una simulazione. La GUI dovrebbe presentare i dati nei grafici.
Il mio problema attuale è: come collegare i diversi moduli / classi / file tra loro se devono essere il più indipendenti possibile?
Ad esempio: sto creando una GUI in un file, come questo:
# userinterface.py
class Userinterface(object):
def __init__(self, controller):
self.controller = controller
self.buildGUI()
return
def buildGUI():
# build lots of widgets and stuff
widget = tk.Thewidget(options=values, command=self.controller.onclick)
E chiamalo la mia interfaccia. Per mantenere questo file bello e pulito, vorrei definire tutte le funzioni per gestire i clic sui pulsanti e leggere i campi in un altro file e immagino che questo sia ciò che chiamereste la parte controller:
# main.py
import userinterface as gui
class Controls(object):
def onclick(self):
# read values from widgets and do stuff
var1 = GUI.widget_entry.get()
# Call some other function with var1 etc.
if __name__ == '__main__':
GUI_controls = Controls()
GUI = gui.UserInterface(GUI_controls)
Ma come faccio a collegare questi due? Nel mio esempio sopra, sto passando un'istanza del mio oggetto Controls. Ma poi ho letto anche su Eventi o Ereditarietà o sottoclassi.
Sono piuttosto nuovo alla programmazione e ho iniziato tutto questo 2 mesi fa, quindi sto lottando per ordinare tutte queste teorie.
Se qualcuno potrebbe indicarmi quale dovrebbe essere il modo di comunicare tra i miei moduli / file e quale aspetto avrà un tale punto di incontro. Oppure dammi un link che posso studiare (come ha fatto Javier, anche se dovrò leggere questa cosa più di una volta)