GUI上のSpinboxで設定したX、Yの値を同一Gui上のグラフにプロットしたいと思っています。
(Xは時間、Yは温度で温度プロフィール的なイメージになります。)
GUIは4フレームで構成されており、各フレームで別ファイルで作成しています。
frame2.pyは温度用Spinboxが6個、時間用Spinboxが6個とSetボタンを配置しており、Setボタンを押すことでSpinboxの値をリストの格納したいと思っています。
frame3.pyでは、frame2で作成したリストを読み込みmatplotlibでグラフに描写したいと思っています。
ここ最近、Pythonを学び始めた初心者で何かしらアドバイスなどご教示頂ければ幸いです。
該当のソースコード
frame2.py
1import customtkinter 2import tkinter as tk 3import frame3 4 5class ReadFileFrame2(customtkinter.CTkFrame): 6 def __init__(self, *args, header_name="ReadFileFrame2", **kwargs): 7 super().__init__(*args, **kwargs) 8 self.header_name = header_name 9 self.setup_form2() 10 11 def setup_form2(self): 12 self.spinboxt1c = tk.Spinbox(master=self) 13 self.spinboxt1c.grid() 14 15 self.spinboxt1s = tk.Spinbox(master=self) 16 self.spinboxt1s.grid() 17 18 19 #一部省略 20 21 22 self.spinboxt6c = tk.Spinbox(master=self) 23 self.spinboxt6c.grid() 24 25 self.spinboxt6s = tk.Spinbox(master=self) 26 self.spinboxt6s.grid() 27 28 self.setpb1 = customtkinter.CTkButton(master=self, command=self.get_values_temp) 29 self.setpb1.grid() 30 31 def get_values_temp(self): 32 33 y_1 = self.spinboxt1c.get() 34 y_2 = self.spinboxt2c.get() 35 y_3 = self.spinboxt3c.get() 36 y_4 = self.spinboxt4c.get() 37 y_5 = self.spinboxt5c.get() 38 y_6 = self.spinboxt6c.get() 39 40 x_1 = self.spinboxt1s.get() 41 x_2 = self.spinboxt2s.get() 42 x_3 = self.spinboxt3s.get() 43 x_4 = self.spinboxt4s.get() 44 x_5 = self.spinboxt5s.get() 45 x_6 = self.spinboxt6s.get() 46 47 global y_list 48 global x_list 49 50 y_list = [0, y_1, y_2, y_3, y_4, y_5, y_6] 51 x_list = [0, x_1, x_2, x_3, x_4, x_5, x_6] 52 53 global frame3 54 frame3 = frame3.ReadFileFrame3(master=self.master, x_list=x_list, y_list=y_list)
frame3.py
1import customtkinter 2import tkinter as tk 3import matplotlib.pyplot as plt 4from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk 5from matplotlib.figure import Figure 6import numpy as np 7import frame2 8 9class ReadFileFrame3(customtkinter.CTkFrame): 10 def __init__(self, *args, header_name="ReadFileFrame3", x_list=None, y_list=None, **kwargs): 11 super().__init__(*args, **kwargs) 12 self.header_name = header_name 13 self.x_list = x_list 14 self.y_list = y_list 15 self.setup_form3() 16 17 def setup_form3(self): 18 fig = Figure(figsize=(5, 6)) 19 20 self.ax = fig.add_subplot(1, 1, 1) 21 self.ax.set_ylabel("Temp[℃]") 22 self.ax.set_xlabel("Time[Sec]") 23 24 self.fig_canvas = FigureCanvasTkAgg(fig, self) 25 self.fig_canvas.get_tk_widget().pack() 26 27 # Use the values of x_list and y_list passed as arguments to the constructor 28 if self.x_list is not None and self.y_list is not None: 29 self.ax.plot(self.x_list, self.y_list) 30 31 self.fig_canvas.draw()
具体的にどこで躓いていますか?
現状のコードでは、frame3のpack/grid が呼ばれていませんが、
省略されているのかどうかが判断できません。
コードが長くなる場合は、問題の部分を簡素にする等の工夫をして
質問には実行可能なコードを掲載してください。
(例えば、スピンボックス1つにして、別フレームのグラフに反映させる等)
