FC2ブログ

PySimpleGUI 学習:FigureCanvasTkAgg の利用

2021-03-17 :  PCクリニック
前々回(2021-03-03)の記事:
PySimpleGUI 学習:グラフ表示
で、

  matplotlibとの連携

について若干学習したが、
イマイチ理解できなかった(汗;

特に、

  from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

と云ったコード。
見たことがなかった。


そこで、更なる学習を行った。


matplotlib FigureCanvasTkAgg」と検索して、

2020.07.19 付 ブログ記事:
Tkinterでmatplotlibを埋め込んでグラフ表示する方法

を見つけた。


PySimpleGUI の前に、元となっている Tkinter の学習から。


当該記事は、

   Pythonの 標準GUIプログラミングライブラリである Tkinter は
  matplotlib とも連携可能です。
   ここでは簡単な波形を使い、
  Tkinter で matplotlib を使う1つの事例を紹介します。

と云うことですね。

そして、

  目次

  1 Tkinterとmatplotlibの概要
    1.1 Tkinterのおさらい
    1.2 matplotlibのおさらい
    1.3 Tkinterとmatplotlibを組み合わせる理由
  2 Tkinterにmatplotlibのグラフを埋め込むコード
    2.1 目標
    2.2 import文
    2.3 プロットの関数を用意する
    2.4 ボタンイベントの関数を用意する
    2.5 Tkinterのウィンドウを用意する
    2.6 widgetのレイアウトをする
    2.7 全コード(コピペ用)
  3 まとめ

とあるので、

  “2.7 全コード(コピペ用)”

をコピペさせて頂いた:
# -*- coding: utf-8 -*-                  # コードは、UTF-8

from tkinter import *
from matplotlib import pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

# プロットをする関数
def plot_wave(x, y):
# Figureインスタンスを生成する。
fig = plt.Figure()

# 目盛を内側にする。
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

# Axesを作り、グラフの上下左右に目盛線を付ける。
ax1 = fig.add_subplot(111)
ax1.yaxis.set_ticks_position('both')
ax1.xaxis.set_ticks_position('both')

# 軸のラベルを設定する。
ax1.set_xlabel('x')
ax1.set_ylabel('y')

# データをプロットする。
ax1.plot(x, y)
return fig

ef button1():
x = np.arange(0, 10, 0.1)
y = np.random.rand(len(x))
fig = plot_wave(x, y)
canvas = FigureCanvasTkAgg(fig, frame_2)
canvas.draw()
canvas.get_tk_widget().grid(row=0, column=0)

# Windowの設定
root = Tk()
root.title("Plot window")
root.geometry()

# Frameの設定
frame_1 = Frame(root, bd=4, relief=GROOVE)
frame_2 = Frame(root, bd=4, relief=GROOVE)

# widgetの設定
btn1 = Button(frame_1, text='Update', command=button1)
fig = plot_wave(0, 0)
canvas = FigureCanvasTkAgg(fig, frame_2)

# widgetの配置
frame_1.grid(row=0, column=0, sticky=W + E)
frame_2.grid(row=1, column=0)
btn1.pack(fill=X)
canvas.get_tk_widget().grid(row=0, column=0)

root.mainloop()
これを実行しながら、
目次に沿って、コードを解読。


これまでは、
from matplotlib import pyplot as plt
に相当する、
import  matplotlib.pyplot  as  plt
で描画していた。
 例えば、Python 学習:スプライン曲線

今回、初めて、
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
なる関数を知った。

今使っているのは、matplotlib 2.1.0 だが、
Matplotlib 3.2.1 documentation に
Embedding in Tk
があった:
import tkinter

from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure

import numpy as np


root = tkinter.Tk()
root.wm_title("Embedding in Tk")

fig = Figure(figsize=(5, 4), dpi=100)
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))

canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.draw()

・・・・・
・・・・・
こんな使い方をするんダ。


なんとなくだが、FigureCanvasTkAgg が見えてきた。

これを、
PySimpleGUIで書くんだ。


参考記事は?

PySimpleGUI matplotlib FigureCanvasTkAgg」と検索して、

そのものずばり、
“Qiita”の記事:「PySimpleGUIにMatplotlibを埋め込みたい
が見つかった。

これで、更なる学習だ。



本日はここまで。


PySimpleGUI の学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒

201221
関連記事
スポンサーサイト



コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking



最新記事
カレンダー
07 | 2021/08 | 09
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

FC2 / i2i / Google




Google Analytics
ブックマーク