Я пытаюсь создать программу, которая отображает произвольное количество точек на холсте на основе двух ползунков (минимальное и максимальное значение), где значения считываются из списка данных.
Проблема, с которой я сталкиваюсь, заключается в обновлении холста новыми точками при каждом манипулировании ползунками. Единственный способ заставить его работать — перерисовывать весь холст каждый раз, когда перемещаются ползунки (как видно из приведенного ниже фрагмента кода), но это кажется довольно неэффективным, а также вызывает раздражающее мерцание. Я хочу, чтобы холст был статичным, а затем просто рисовал точки из списка при манипулировании ползунками.
Некоторый пример кода, который работает, хотя я сократил части для удобства чтения:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from tkinter import *
from matplotlib.figure import Figure
import tkinter as Tk
list1=[0,1000,3000,5000,10000] #these lists are read from a file, but
list2=[25,50,75,100,120] #I've shortened that part down to make it compact
def slide(*args):
slidervalue1=var.get()
slidervalue2=var2.get()
f = Figure(figsize=(10,8), dpi=75)
a = f.add_subplot(111)
a.plot(list1[slidervalue1:slidervalue2],list2[slidervalue1:slidervalue2],'.', color='k')
canvas = FigureCanvasTkAgg(f, master=root)
canvas.get_tk_widget().grid(row=1,column=0, sticky='nw')
root = Tk.Tk()
var=IntVar()
var2=IntVar()
f = Figure(figsize=(10,8), dpi=75)
a = f.add_subplot(111)
canvas = FigureCanvasTkAgg(f, master=root)
canvas.get_tk_widget().grid(row=1,column=0, sticky='w')
toolbar = NavigationToolbar2TkAgg(canvas,root)
toolbar.update()
toolbar.grid(row=0,column=0,sticky='w')
slider=Scale(master=root,from_=1,to=len(perctp),variable=var,orient='horizontal', command=slide)
slider2=Scale(master=root,from_=1,to=len(perctp),variable=var2,orient='horizontal')
slider.grid(row='3', column='0', sticky='w')
slider2.grid(row='3', column='0',sticky='w',padx='150')
Tk.mainloop()
Я искал тему и неоднократно сталкивался с «update_idletasks ()», но у меня не получилось.
Любые идеи?