(May-16-2022, 05:14 PM)menator01 Wrote: Maybe this will get you started. I've not ever worked with matplotlib or numpy but, anyway, here's my attempt
import tkinter as tk import numpy as np from matplotlib.figure import Figure from matplotlib import cm from matplotlib.colors import ListedColormap from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg np.random.seed(2) def plot(var, window): num = list(np.random.randint(low=1, high=10, size=120)) nx, ny = 3, 4 reshaped = np.array(num).reshape(10, nx*ny) layer = reshaped[var-1:var, :] layer = layer.reshape(nx, ny) x, y = np.mgrid[slice(0, nx+1, 1), slice(0, ny+1, 1)] figure = Figure(figsize=(4, 4)) ax = figure.add_subplot(111) col_type = cm.get_cmap('rainbow', 256) newcolors = col_type(np.linspace(0, 1, 1000)) white = np.array([1, 1, 1, 1]) newcolors[:1, :] = white newcmap = ListedColormap(newcolors) c = ax.pcolormesh(x, y, layer, cmap=newcmap, edgecolor='lightgray', linewidth=0.003) ax.figure.colorbar(c) canvas = FigureCanvasTkAgg(figure, window) canvas.draw() canvas.get_tk_widget().pack() class Window: def __init__(self, parent): self.slidervar = tk.IntVar() self.slider = tk.Scale(parent, from_=1, to=10, orient='horizontal') self.slider['variable'] = self.slidervar self.slider.pack() self.button = tk.Button(parent) self.button['text'] = 'Open Window' self.button.pack() class TopWindow: def __init__(self): self.window = tk.Toplevel(None) self.window.geometry('+500+300') self.label = tk.Label(self.window) self.label.pack() class Controller: def __init__(self, window): self.window = window self.window.button['command'] = self.openwindow self.window.slider['command'] = self.update def openwindow(self): self.topwindow = TopWindow() plot(self.window.slidervar.get(), self.topwindow.window) def update(self, event): plot(self.window.slidervar.get(), self.topwindow.window) if __name__ == '__main__': root = tk.Tk() root.geometry('200x200+250+250') Controller(Window(root)) root.mainloop()
Thanks for your solution. The reason I am confused a little bit, is that this problem is a small example of my bigger code. Some of the parameters in the plot() are called from other classes, and my class's structure is a little bit different than the one you wrote. Should the plot function be always out of the classes or it can be considered within a class?