0

We have some discussions about embedding a matplotlib with slider in tkinter

Python: Embed a matplotlib plot with slider in tkinter properly

The key part is the following codes

import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')

root = Tk.Tk()
root.title("Embedding in TK")
fig = plt.Figure()                       
canvas = FigureCanvasTkAgg(fig, root)     
canvas.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1)

My question focuses on 'contourf'.

X = np.arange(1,5,1)
Y = np.arange(1,5,1)
x , y = np.meshgrid(X,Y)  
z = [
    [0, 0, 0, 0],
    [0, 1, 1, 0],
    [0, 1, 1, 0],
    [0, 0, 0, 0],
    ]    
conto = plt.contourf(x,y,z)
canvas = FigureCanvasTkAgg(conto,root)
canvas.get_tk_widget().grid(column=0, row=1, pady=15, sticky=tk.W)

The above is what I tried to do; however, an error popped out

AttributeError: 'QuadContourSet' object has no attribute 'set_canvas'

Is there any way for 'contourf', like canvas, such that we can embed contourf into tkinter?

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Denny
  • 223
  • 2
  • 15

1 Answers1

1

Here is a working example mixed between the offical exampel of matplot in tkinter and a random youtube video. It works fine for me:

import tkinter as tk
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')

root = tk.Tk()
root.title("Embedding in TK")

fig = plt.Figure()                       
canvas = FigureCanvasTkAgg(fig, root)     
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

ax = fig.add_subplot(111)
u = np.linspace(-1,1,100)
x,y = np.meshgrid(u,u)
z = x**2 + y**2
ax.contourf(x,y,z)
Thingamabobs
  • 7,274
  • 5
  • 21
  • 54