gui.py~ 9.14 KB
#!/usr/bin/python
from gi.repository import Gtk
from netCDF4 import Dataset
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
from matplotlib.backends.backend_gtk3cairo import FigureCanvasGTK3Cairo as FigureCanvas
from matplotlib.backends.backend_gtk3 import NavigationToolbar2GTK3 as NavigationToolbar
 


class Handler:
    def __init__(self):
        self.gladefile = "/home/jeremy/Bureau/GUI/wim.glade"
        self.builder = Gtk.Builder()
        self.builder.add_from_file(self.gladefile)
    	self.builder.connect_signals(self)
    	self.window = self.builder.get_object("window1")
    	self.window.show()
	self.hscale1 = self.builder.get_object("hscale1")         
	self.hscale2 = self.builder.get_object("hscale2")
	self.thick = self.builder.get_object("checkbutton1")
	self.conc = self.builder.get_object("checkbutton2")
	self.meanfloe = self.builder.get_object("checkbutton3")
	self.FSTD = self.builder.get_object("checkbutton5")

	

	
  
    def disable(self,widget,event):
	return True

    def on_destroy(self,closewindow):
        closewindow.hide()

    def on_window1_destroy(self,window):
        Gtk.main_quit()

#===================choose_file_button===================================
    def on_filechooserbutton1_file_set(self,choosefile):
	global data
	data = choosefile.get_filename()
	self.readnc(data)
	ad1 = Gtk.Adjustment(25,0,99,1,1, 0)
        self.hscale1.set_adjustment(adjustment=ad1)
	ad2 = Gtk.Adjustment(25,0,99,1,1, 0)
        self.hscale2.set_adjustment(adjustment=ad2)	
	global xvalue
	xvalue=x_axis[0]
	global timevalue
	timevalue=time[0]

	self.windowthick = Gtk.Window()
	self.windowthick.set_default_size(400,400)
	self.windowthick.connect("delete-event",self.disable)
	self.fig1=plt.figure(1)
	canvas1 = FigureCanvas(self.fig1)
	canvas1.set_size_request(100,100)
	self.axthick = self.fig1.add_subplot(111)
        self.axthick.plot(x_axis,thickness)
	self.vline1=self.axthick.axvline(x_axis[xvalue],color='k',ls='dashed')
	self.hline1=self.axthick.axhline(thickness[xvalue],color='k',ls='dashed')
	self.pointer=self.axthick.plot(x_axis[xvalue],thickness[xvalue],'ro',markersize=10.0)[0]
	self.axthick.set_ylabel('Mean ice thickness')
	self.windowthick.set_title('Mean ice thickness')
	self.vbox = Gtk.VBox()
	self.windowthick.add(self.vbox)
	self.vbox.pack_start(canvas1,True,True, 0)
	toolbar = NavigationToolbar(canvas1,self.windowthick)
	self.vbox.pack_start(toolbar, False, False,0)

	self.windowconc = Gtk.Window()
	self.windowconc.set_default_size(400,400)
	self.windowconc.set_title('Ice concentration')
	self.windowconc.connect("delete-event",self.disable)
	self.fig3=plt.figure(3)
	canvas3 = FigureCanvas(self.fig3)
	canvas3.set_size_request(100,100)
	self.axconc = self.fig3.add_subplot(111)
	self.axconc.plot(x_axis,ice_concentration)
	self.vline2=self.axconc.axvline(x_axis[xvalue],color='k',ls='dashed')
	self.hline2=self.axconc.axhline(ice_concentration[xvalue],color='k',ls='dashed')
	self.pointer2=self.axconc.plot(x_axis[xvalue],ice_concentration[xvalue],'ro',markersize=10.0)[0]
	self.axconc.set_ylabel('Ice concentration')
	self.vboxconc = Gtk.VBox()
	self.windowconc.add(self.vboxconc)
	self.vboxconc.pack_start(canvas3,True,True, 0)
	toolbar3 = NavigationToolbar(canvas3,self.windowconc)
	self.vboxconc.pack_start(toolbar3, False, False,0)

	self.windowmeanfloe = Gtk.Window()
	self.windowmeanfloe.set_default_size(400,400)
	self.windowmeanfloe.set_title('Mean Floe size')
	self.windowmeanfloe.connect("delete-event",self.disable)
	self.fig4=plt.figure(4)
	canvas4 = FigureCanvas(self.fig4)
	canvas4.set_size_request(100,100)
	self.axmeanfloe = self.fig4.add_subplot(111)
	self.axmeanfloe.plot(x_axis,D_ave)
	self.vline3=self.axmeanfloe.axvline(x_axis[xvalue],color='k',ls='dashed')
	self.hline3=self.axmeanfloe.axhline(D_ave[xvalue],color='k',ls='dashed')
	self.pointer3=self.axmeanfloe.plot(x_axis[xvalue],D_ave[xvalue],'ro',markersize=10.0)[0]
	self.axconc.set_ylabel('Mean floe size')
	self.vboxmeanfloe = Gtk.VBox()
	self.windowmeanfloe.add(self.vboxmeanfloe)
	self.vboxmeanfloe.pack_start(canvas4,True,True, 0)
	toolbar4 = NavigationToolbar(canvas4,self.windowmeanfloe)
	self.vboxmeanfloe.pack_start(toolbar4, False, False,0)

	self.windowfstd = Gtk.Window()
	self.windowfstd.set_default_size(400,400)
	self.windowfstd.set_title('FSTD')
	self.windowfstd.connect("delete-event",self.disable)
	self.fig2=plt.figure(2)
	canvas2 = FigureCanvas(self.fig2)
	canvas2.set_size_request(100,100)
	self.axfstd= self.fig2.add_subplot(111)
	FSD2=FSD[:,:,xvalue,timevalue]
	ITD2=ITD[:,xvalue]
	global FSTD
	FSTD=np.zeros((50,60))
	for i in xrange(0,49):
	 FSTD[i,:]=FSD2[i,:]*ITD2[i]
	self.fstdplot=self.axfstd.imshow(FSTD, interpolation='nearest', cmap=cm.coolwarm)
	self.cbar = self.fig2.colorbar(self.fstdplot)
	self.cbar.set_clim(0,0.1)
	self.vboxfstd = Gtk.VBox()
	self.windowfstd.add(self.vboxfstd)
	self.vboxfstd.pack_start(canvas2,True,True, 0)
	toolbar2 = NavigationToolbar(canvas2,self.windowfstd)
	self.vboxfstd.pack_start(toolbar2, False, False,0)


	if self.thick.get_active():
	 self.plot_thick(x_axis,thickness,xvalue)
	if self.conc.get_active():
	 self.plot_conc(x_axis,ice_concentration,xvalue)
	if self.meanfloe.get_active():
	 self.plot_meanfloe(x_axis,D_ave,xvalue)
	if self.FSTD.get_active():
         self.plot_FSTD(xvalue,timevalue,Fsize,hcat,FSD,ITD)


#======================scale_buttons======================================	
    def on_hscale1_value_changed(self,timescale):	
	timevalue=timescale.get_value()
	if self.FSTD.get_active():
         self.plot_FSTD(xvalue,timevalue,Fsize,hcat,FSD,ITD)
	
    def on_hscale2_value_changed(self,xscale):
        xvalue=xscale.get_value()
	if self.thick.get_active():
         self.plot_thick(x_axis,thickness,xvalue)
	if self.FSTD.get_active():
         self.plot_FSTD(xvalue,timevalue,Fsize,hcat,FSD,ITD)
	if self.conc.get_active():
	 self.plot_conc(x_axis,ice_concentration,xvalue)
	if self.meanfloe.get_active():
	 self.plot_meanfloe(x_axis,D_ave,xvalue)

#====================toggle_button=========================================
    def on_checkbutton1_toggled(self,but1):
	if but1.get_active():
	 self.plot_thick(x_axis,thickness,xvalue)
	else:
	 self.on_destroy(self.windowthick)

    def on_checkbutton2_toggled(self,butconc):
	if butconc.get_active():
	 self.plot_conc(x_axis,ice_concentration,xvalue)
	else:
	 self.on_destroy(self.windowconc)

    def on_checkbutton3_toggled(self,butmeanfloe):
	if butmeanfloe.get_active():
	 self.plot_meanfloe(x_axis,D_ave,xvalue)
	else:
	 self.on_destroy(self.windowmeanfloe)

    def on_checkbutton5_toggled(self,butFSTD):
	if butFSTD.get_active():
	 self.plot_FSTD(xvalue,timevalue,Fsize,hcat,FSD,ITD)
	else:
	 self.on_destroy(self.windowfstd)

#==========================================================================
    def plot_thick(self,x_axis,thickness,xvalue):
	 self.pointer.set_ydata(thickness[xvalue])
	 self.vline1.set_xdata(x_axis[xvalue])
	 self.hline1.set_ydata(thickness[xvalue])
	 self.pointer.set_xdata(x_axis[xvalue])
	 self.windowthick.show_all()
	 self.windowthick.present()
	 self.window.present()

#==========================================================================
    def plot_conc(self,x_axis,ice_concentration,xvalue):
	 self.pointer2.set_ydata(ice_concentration[xvalue])
	 self.vline2.set_xdata(x_axis[xvalue])
	 self.hline2.set_ydata(ice_concentration[xvalue])
	 self.pointer2.set_xdata(x_axis[xvalue])
	 self.windowconc.show_all()
	 self.windowconc.present()
	 self.window.present()

#==========================================================================
    def plot_meanfloe(self,x_axis,D_ave,xvalue):
	 self.pointer3.set_ydata(D_ave[xvalue])
	 self.vline3.set_xdata(x_axis[xvalue])
	 self.hline3.set_ydata(D_ave[xvalue])
	 self.pointer3.set_xdata(x_axis[xvalue])
	 self.windowmeanfloe.show_all()
	 self.windowmeanfloe.present()
	 self.window.present()

#=========================================================================    
    def plot_FSTD(self,xvalue,timevalue,Fsize,hcat,FSD,ITD):
	FSD2=FSD[:,:,xvalue,timevalue]
	ITD2=ITD[:,xvalue]
	global FSTD
	FSTD=np.zeros((50,60))
	for i in xrange(0,49):
	 FSTD[i,:]=FSD2[i,:]*ITD2[i]
	self.fstdplot.set_data(FSTD)
	plt.draw()
        self.windowfstd.show_all()
	self.windowfstd.present()
	self.window.present()
#==========================================================================

    def readnc(self,data):
	global omega
        global x_axis
	global time
	global hcat
	global Fsize
	global spectrum
	global D_ave
	global ice_concentration
	global FSD
	global Hs
	global ITD
        global thickness
        fh = Dataset(data)
	omega = fh.variables['omega'][:]
        x_axis = fh.variables['x_axis'][:]
	time = fh.variables['time'][:]
	hcat= fh.variables['thickness categories'][:]
	Fsize= fh.variables['floe size'][:]
	spectrum = fh.variables['Spectrum'][:,:,:]
	D_ave = fh.variables['Dave'][:]
	ice_concentration = fh.variables['Ice concentration'][:]
        thickness = fh.variables['Ice thickness'][:]
	FSD = fh.variables['Floe size distribution'][:,:,:,:]
	Hs = fh.variables['significant height'][:,:]
	ITD = fh.variables['Ice Thickness Distribution'][:,:]
        fh.close()


if __name__ == "__main__":
  main = Handler()
Gtk.main()