Skip to content
Snippets Groups Projects
Commit d626ebce authored by Nils Brüggemann's avatar Nils Brüggemann Committed by Fraser William Goldsworth
Browse files

pyic_view: Using .pack instead of .group to place widgets. Option to update...

pyic_view: Using .pack instead of .group to place widgets. Option to update data range to zoom area.
parent 5c79c515
No related branches found
No related tags found
1 merge request!43Allow users to set projection with cartopy projection object
......@@ -108,6 +108,7 @@ class view(object):
print('setup TKinter')
root = tk.Tk()
root.title("pyicon view")
root.geometry("1200x800")
self.flist = flist
self.path_grid = path_grid
......@@ -154,6 +155,10 @@ class view(object):
self.selected_res = tk.StringVar(value="0.3")
self.selected_proj = tk.StringVar(value="None")
# Variables to store zoom area
self.press_event = None
self.rect = None
# Create figure and axis
self.fig, self.ax, self.cax = generate_axes(asp=0.5)
......@@ -162,89 +167,122 @@ class view(object):
#print(self.ax.get_position())
# TK canvas
self.canvas = FigureCanvasTkAgg(self.fig, master=root)
self.canvas.get_tk_widget().grid(row=0, column=0, columnspan=3)
frame_plot = tk.Frame(root)
frame_plot.pack(fill="both", expand=True)
self.canvas = FigureCanvasTkAgg(self.fig, master=frame_plot)
self.canvas.get_tk_widget().pack(fill="both", expand=True)
# Connect the click event to the function
self.canvas.mpl_connect("button_press_event", self.on_click)
# Create sliders
# --- 1st row
print('Setup sliders')
self.slider_t = tk.Scale(root, from_=0, to=len(self.ds.time)-1,
orient="horizontal", label="time", command=self.update_plot)
self.slider_t.grid(row=1, column=0, columnspan=2, sticky="ew")
pady_num = 8
frame1 = tk.Frame(root)
frame1.pack(fill="x", pady=pady_num)
# time slider
btn_dec_t = tk.Button(frame1, text="-", command=lambda: self.decrease_slider(self.slider_t))
btn_dec_t.pack(side="left")
self.slider_t = tk.Scale(frame1, from_=0, to=len(self.ds.time)-1,
orient="horizontal", label="time", command=self.update_data)
self.slider_t.pack(side="left", pady=pady_num, ipadx=160)
btn_inc_t = tk.Button(frame1, text="+", command=lambda: self.increase_slider(self.slider_t))
btn_inc_t.pack(side="left")
# space inbetween
spacer = tk.Frame(frame1, width=30) # 10 pixels wide
spacer.pack(side="left")
self.slider_d = tk.Scale(root, from_=0, to=1,
orient="horizontal", label="depth", command=self.update_plot)
self.slider_d.grid(row=1, column=2, columnspan=2, sticky="ew")
# depth slide
btn_dec_d = tk.Button(frame1, text="-", command=lambda: self.decrease_slider(self.slider_d))
btn_dec_d.pack(side="left")
self.slider_d = tk.Scale(frame1, from_=0, to=1,
orient="horizontal", label="depth", command=self.update_data)
self.slider_d.pack(side="left", pady=pady_num, ipadx=160)
btn_inc_d = tk.Button(frame1, text="+", command=lambda: self.increase_slider(self.slider_d))
btn_inc_d.pack(side="left")
# --- 2nd row
frame2 = tk.Frame(root)
frame2.pack(fill="x", pady=pady_num)
# Create dropdown menus
print('Setup var dropdown')
var_menu = ttk.Combobox(
root, textvariable=self.selected_var,
frame2, textvariable=self.selected_var,
values=list(self.ds.data_vars.keys()), state="readonly"
)
var_menu.grid(row=2, column=0)
var_menu.bind("<<ComboboxSelected>>", self.update_plot)
var_menu.pack(side="left", padx=5)
var_menu.bind("<<ComboboxSelected>>", self.update_data)
# Cmap dropdown
print('Setup cmap dropdown')
cmap_menu = ttk.Combobox(root, textvariable=self.selected_cmap,
cmap_menu = ttk.Combobox(frame2, textvariable=self.selected_cmap,
values=self.colormaps, state="readonly")
cmap_menu.grid(row=2, column=1)
cmap_menu
cmap_menu.bind("<<ComboboxSelected>>", self.update_cmap)
# Color limit entry
print('Setup color limits')
entry = tk.Entry(root, textvariable=self.color_limits)
entry.grid(row=2, column=2)
entry = tk.Entry(frame2, textvariable=self.color_limits)
entry.pack(side="left", padx=5)
entry.insert(0, "") # Default value
entry.bind("<Return>", self.update_clim) # Update when pressing Enter
# lon_lat_reg entry
print('Setup lon_reg')
entry = tk.Entry(root, textvariable=self.lon_lat_reg_tk)
entry.grid(row=3, column=1)
# Checkbox for grid display
self.do_grid = tk.BooleanVar()
self.checkbox = tk.Checkbutton(frame2, text="Show grid",
variable=self.do_grid, command=self.toggle_grid)
self.checkbox.pack(side="left", padx=5)
# save_fig entry
entry = tk.Entry(frame2, textvariable=self.save_fig_tk)
entry.pack(side="left", padx=5)
entry.insert(0, "") # Default value
entry.bind("<Return>", self.make_new_axis) # Update when pressing Enter
entry.bind("<Return>", self.save_figure) # Update when pressing Enter
# --- 3rd row
frame3 = tk.Frame(root)
frame3.pack(fill="x", pady=pady_num)
# res entry
print('Setup res dropdown')
res_menu = ttk.Combobox(root, textvariable=self.selected_res,
res_menu = ttk.Combobox(frame3, textvariable=self.selected_res,
values=self.res_all, state="readonly")
res_menu.grid(row=3, column=0)
res_menu.pack(side="left", padx=5)
res_menu.bind("<<ComboboxSelected>>", self.make_new_axis)
# lon_lat_reg entry
print('Setup lon_reg')
self.entry_lon_lat_reg = tk.Entry(frame3, textvariable=self.lon_lat_reg_tk)
self.entry_lon_lat_reg.pack(side="left", padx=5)
self.entry_lon_lat_reg.insert(0, "") # Default value
self.entry_lon_lat_reg.bind("<Return>", self.make_new_axis) # Update when pressing Enter
# Button to update data range
self.update_range_button = ttk.Button(frame3, text="Update data range",
command=self.update_data_range)
self.update_range_button.pack(side="left", padx=5)
# Button to activate zoom mode
self.zoom_button = ttk.Button(root, text="Enable Zoom",
self.zoom_button = ttk.Button(frame3, text="Enable Zoom",
command=self.activate_zoom)
self.zoom_button.grid(row=3, column=2)
# save_fig entry
entry = tk.Entry(root, textvariable=self.save_fig_tk)
entry.grid(row=4, column=1)
entry.insert(0, "") # Default value
entry.bind("<Return>", self.save_figure) # Update when pressing Enter
# Variables to store zoom area
self.press_event = None
self.rect = None
# Variables to store zoom area
self.press_event = None
self.rect = None
self.zoom_button.pack(side="left", padx=5)
# proj entry
print('Setup proj dropdown')
res_menu = ttk.Combobox(root, textvariable=self.selected_proj,
res_menu = ttk.Combobox(frame3, textvariable=self.selected_proj,
values=list(self.proj_dict), state="readonly")
res_menu.grid(row=3, column=3)
res_menu.pack(side="left", padx=5)
res_menu.bind("<<ComboboxSelected>>", self.make_new_axis)
# checkbox for grid display
self.do_grid = tk.BooleanVar()
self.checkbox = tk.Checkbutton(root, text="Show grid",
variable=self.do_grid, command=self.toggle_grid)
self.checkbox.grid(row=2, column=3)
# --- end tk objects
# initial plot
self.plot_data()
......@@ -407,6 +445,7 @@ class view(object):
self.ax.set_yticks([])
self.ax.set_facecolor('0.7')
self.update_cmap()
self.update_clim()
# set titles
#self.ht_var = self.ax.set_xlabel('', fontsize=self.font_size)
self.ht_var = self.cax.set_ylabel('', fontsize=self.font_size)
......@@ -452,9 +491,25 @@ class view(object):
self.plot_data()
self.canvas.draw()
def update_data_range(self):
xlim = self.ax.get_xlim()
ylim = self.ax.get_ylim()
lon_lat_reg_str = f'{xlim[0]:3g},{xlim[1]:3g},{ylim[0]:3g},{ylim[1]:3g}'
print(lon_lat_reg_str)
self.lon_lat_reg_tk.set(lon_lat_reg_str)
self.make_new_axis()
def increase_slider(self, slider):
slider.set(slider.get() + 1)
self.update_data()
def decrease_slider(self, slider):
slider.set(slider.get() - 1)
self.update_data()
# Function to update plot
def update_plot(self, *args):
def update_data(self, *args):
# Get current slider values
self.it = int(self.slider_t.get())
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment