

tkinterを使って、エクセルから作成したデータフレームをグラフとして表示させようとしています。しかし、”グラフ”・”グラフを更新”どちらのボタンを押しても、グラフが更新されないです。

[code]

    import tkinter as tk
    import csv
    from tkinter import filedialog
    import numpy as np
    import pandas as pd 
    from matplotlib.figure import Figure
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
    import matplotlib.pyplot as plt
    import sys
    
    root = tk.Tk()
    root.geometry("1500x800")
    root.title(u"Zero point treatment")
    root.resizable(False,False)
    #windowの設定
    
    load = tk.Frame(root,width=500,height=500,borderwidth=1,relief='solid')
    HSM = tk.Frame(root,width=500,height=500,borderwidth=1,relief='solid')
    modulus = tk.Frame(root,width=500,height=500,borderwidth=1,relief='solid')
    monitor = tk.Frame(root,width=500,height=300,borderwidth=1,relief='solid')
    button = tk.Frame(root,width=500,height=300,borderwidth=1,relief='solid',cursor='hand2')
    enter = tk.Frame(root,width=500,height=300,borderwidth=1,relief='solid')
    #frameの定義
    
    load.propagate(False)
    HSM.propagate(False)
    modulus.propagate(False)
    monitor.propagate(False)
    button.propagate(False)
    enter.propagate(False)
    #frameのサイズを固定
    
    load.grid(row=0,column=0)
    HSM.grid(row=0,column=1)
    modulus.grid(row=0,column=2)
    monitor.grid(row=1,column=2)
    button.grid(row=1,column=0)
    enter.grid(row=1,column=1)
    #frameを配置
    
    #＿＿＿＿＿＿＿約束の地　変数宣言＿＿＿＿＿＿＿
    mini = 200
    max = 500
    #HSMどの範囲で補正するか初期設定。mini~max(nm)
    x = []
    y_load = []
    y_HSM = []
    y_mod = []
    test_num = 2
    
    #----------------------関数を定義---------------------
    
    #-------------------------------graph関数はデータフレームからグラフを作る関数-----------------------------------
    def graph_load():
        fig_l = plt.Figure()
        instance = fig_l.subplots()
        instance.plot(x,y_load)
        instance.set_xlabel("Depth(nm)")
        instance.set_ylabel("load(mN)")
        instance.set_ylim(-10,300)
        return fig_l
    
    def graph_HSM():
        fig_H = plt.Figure()
        instance = fig_H.subplots()
        instance.plot(x,y_HSM)
        instance.set_xlabel("Depth(nm)")
        instance.set_ylabel("HSM(N/m)")
        instance.set_ylim(-10,3000000)
        return fig_H
    
    def graph_mod():
        fig_mod = plt.Figure()
        instance = fig_mod.subplots()
        instance.plot(x,y_mod)
        instance.set_xlabel("Depth(nm)")
        instance.set_ylabel("modulus(GPa)")
        instance.set_ylim(-10,300)
        return fig_mod
    
    def graph_load2():
        fig = plt.Figure()
        ax = fig.add_subplot(1,1,1)
        canvas = FigureCanvasTkAgg(graph_load(),master=load)
        canvas.get_tk_widget().pack()
        ax.plot(x,y_load)
        ax.set_xlabel("Depth(nm)")
        ax.set_ylabel("load(mN)")
        ax.set_ylim(-10,300)
        canvas.draw()
    
    
    #------------------------------------canvas関数はキャンバスを作り、グラフを置く関数----------------------------------------
    def canvas_load():
        canvas = FigureCanvasTkAgg(graph_load(),master=load)
        canvas.get_tk_widget().pack()
        canvas.draw()
        return canvas_load
    
    def canvas_HSM():
        canvas = FigureCanvasTkAgg(graph_HSM(),master=HSM)
        canvas.get_tk_widget().pack()
        canvas.draw()
        return canvas_HSM
    
    def canvas_mod():
        canvas = FigureCanvasTkAgg(graph_mod(),master=modulus)
        canvas.get_tk_widget().pack()
        canvas.draw()
        return canvas_mod
    
    
    #ボタンをクリックした時の挙動を設定する
    
    filename = filedialog.askopenfilename(
        title = "ゼロ点補正するエクセルファイルを選択",
        filetypes = [ ("Excelブック", ".xls") ], # ファイルフィルタ
        initialdir = "./" # 自分自身のディレクトリ
        )
    
    #--------------------------データフレームを作成-------------------------------
    df_load = pd.read_excel(filename,sheet_name='Test {:03}'.format(test_num),usecols=[1,2],skiprows=[0,1])
    df_HSM = pd.read_excel(filename,sheet_name='Test {:03}'.format(test_num),usecols=[1,4],skiprows=[0,1])
    df_mod = pd.read_excel(filename,sheet_name='Test {:03}'.format(test_num),usecols=[1,6],skiprows=[0,1])
    #データフレームを作成
    
    for line in range(1,1000):
        x.append(df_load.iat[line,0])
        y_load.append(df_load.iat[line,1])
        y_HSM.append(df_HSM.iat[line,1])
        y_mod.append(df_mod.iat[line,1])
        if df_load.iat[line,0] is None:
            break
    #値があるだけエクセルからデータを読み込みアレイに変換
    
    button_canvas = tk.Button(enter,text=u'グラフ',command=lambda:[graph_load(),graph_HSM(),graph_mod(),canvas_load(),canvas_HSM(),canvas_mod()])
    button_canvas.pack()
    
    
    button_canvas2 = tk.Button(enter,text=u'グラフ更新',command=lambda:[graph_load2()])
    button_canvas2.pack()
    
    
    root.mainloop()
    #画面を表示
    
[/code]


CC BY-SA 4.0
2023-04-28T07:09:31.780
94674
2023-04-28T08:09:30.007
2023-04-28T08:09:30.007
3060
58092
question
python matplotlib tkinter
Tkinter を使ったデータフレームのグラフ表示で、ボタンを押してもグラフが更新されない