Wie würde der Code denn aussehen, wenn er "vernünftig abgeräumt" wäre?
Ok, schade. Ne, Browser Lösungen kommen für mich in dem Fall nicht in Frage. Es muss in Tkinter gemacht werden. Die Performance geht eigentlich bis zu dem Zeitpunkt, wo ich einen der beiden Buttons "select all" bzw. "deselect all" betätigt habe. Ich vermute mal, dass es daran liegt, dass ich in einer for-Schleife die value_changed Funktion laufen lasse und dabei jedes Mal neu geplottet wird. Das ist noch nicht optimal und wird noch geändert.
Nachtrag: Ich habe jetzt mal die value_changed Funktion aus der for-Schleife rausgeholt. Die Performance ist nun deutlich besser, aber eigentlich ist es immer noch unbefriedigend.
Code: Alles auswählen
def _value_changed(self, name, _, op):
if self._states[name].get():
self.frame_main_plot = tk.Frame(self.frame_main, bg=self.color_background)
self.frame_main_plot.place(relwidth=0.875, relheight=1.0, relx=0.0, rely=0.0)
self.fig.clear()
self.fig = Figure(figsize=(1,2), facecolor="#FFFFFF")
self.ax = self.fig.add_subplot()
for name, state in self._states.items():
if state.get():
self.ax.plot(self.times, self._values[name], label=name, visible=True)
else:
self.frame_main_plot = tk.Frame(self.frame_main, bg=self.color_background)
self.frame_main_plot.place(relwidth=0.875, relheight=1.0, relx=0.0, rely=0.0)
self.fig.clear()
self.fig = Figure(figsize=(1,2), facecolor="#FFFFFF")
self.ax = self.fig.add_subplot()
for name, state in self._states.items():
if state.get():
self.ax.plot(self.times, self._values[name], label=name, visible=True)
self.ax.grid(True)
self.ax.set_axisbelow(True)
self.ax.set_xlabel("x", labelpad=0.5)
self.ax.set_ylabel("f(x)", labelpad=0.5)
self.ax.legend(fontsize="x-small", framealpha=1.0, bbox_to_anchor=(0.125, 0.02), loc=3, borderaxespad=0,
bbox_transform=plt.gcf().transFigure, ncol=4)
self.fig.tight_layout()
#
self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame_main_plot)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
toolbar = NavigationToolbar2Tk(self.canvas, self.frame_main_plot)
toolbar.config(background=self.color_background)
toolbar._message_label.config(background=self.color_background)
toolbar.update()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)
def cb_select_all(self, states):
for state in states.values():
state.set(True)
state.trace_add("write", self._value_changed)
#
def cb_deselect_all(self, states):
for state in states.values():
state.set(False)
state.trace_add("write", self._value_changed)