Я врезался в стену и не смог найти ни одного сообщения на форуме об этой проблеме в Интернете (по крайней мере, за несколько часов поиска).
к предисловию; У меня мало знаний о Python, за исключением того, что я изучил за последние 2 месяца (медленно), кодируя это в свободное время. Приношу свои извинения, если у меня нет смысла, я еще не совсем понимаю синтаксис команд Python. Следует также отметить, что это кодируется на Raspberry Pi Model 3 B +.
Я выполнил несколько кратких действий по устранению неполадок, изменив расположение функции animate и самой фигуры внутри и снаружи класса приложения и класса Melting Point / Manual Method, но, похоже, я не могу получить его для анимации. Самое большее, я смог отобразить только одну фигуру без анимации. Следует отметить, что те же строки кода работают на предыдущей итерации приложения, но после перестановки классов рисунок больше не обновляется.
from tkinter import *
from datetime import datetime
import time
from time import sleep
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.animation as animation
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
from matplotlib import pyplot as plt
import csv
import tkinter
import numpy as np
class SampleApp(Tk):
def __init__(self):
Tk.__init__(self)
self._frame = None
self.fullscreen = True
self.switch_frame(MeltPoint)
def switch_frame(self, frame_class):
"""Destroys current frame and replaces it with a new one."""
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self.wm_attributes("-fullscreen", True)
self.fullscreen = True
self._frame = new_frame
self._frame.grid(row=1, column=0)
self.fst = Button(self, text="Toggle Fullscreen", command=self.fullscreen_toggle)
self.fst.grid(row=0, column=0, rowspan=2, sticky='NW')
def fullscreen_toggle(self):
if self.fullscreen == False:
self.wm_attributes("-fullscreen", True)
self.fullscreen = True
else:
self.wm_attributes("-fullscreen", False)
self.fullscreen = False
###########################################################
def animate(i):
pullData = open("/home/pi/cpu_temp.txt","r").read()
dataList = pullData.split('\n')
xList = []
yList = []
for eachLine in dataList:
if len(eachLine) > 1:
x,y = eachLine.split(',')
xList.append(float(x))
yList.append(float(y))
a.clear()
a.plot(xList, yList)
a.set_xlabel("Time[MM.SS]")
a.set_ylabel("Temperature[°C]")
class Graph(Canvas):
def __init__(self, master):
Frame.__init__(self, master)
f = Figure(figsize=(9, 5), dpi=60)
a = f.add_subplot(111)
canvas = FigureCanvasTkAgg(f, self)
canvas.draw()
canvas.get_tk_widget().grid(row=0, column=0)
ani = animation.FuncAnimation(f, animate, interval=100)
###########################################################
class MeltPoint(Frame):
def __init__(self, master):
Frame.__init__(self, master)
title = Label(self, text="Melting Point Determination").grid(row=0, column=1)
b1 = Button(self, height=4, width=12, text='Add Method', command=lambda: master.switch_frame(AddMethod)).grid(row=1, column=0, sticky='')
b2 = Button(self, height=4, width=12, text='Manual Method', command=lambda: master.switch_frame(ManMeth)).grid(row=2,column=0, sticky='')
b3 = Button(self, height=4, width=12, text='Recent Analysis/Results').grid(row=3,column=0, sticky='')
b4 = Button(self, height=4, width=12, text='Setup').grid(row=4,column=0, sticky='')
b5 = Button(self, height=4, width=12, text='Exit').grid(row=5,column=0, sticky='')
tl = Frame(self, height=180, width=350, bd=1, relief=SUNKEN).grid(row=1, rowspan=3, column=1, sticky='')
###########################################################
graph = Graph(self).grid(row=4, column=1, rowspan=3, sticky='')
###########################################################
class ManMeth(Frame):
def __init__(self, master):
Frame.__init__(self, master)
title = Label(self, text="Manual Method").grid(row=0, column=1)
b1 = Button(self, height=4, width=12, text='Home', command=lambda: master.switch_frame(MeltPoint)).grid(row=1, column=0)
b2 = Button(self, height=4, width=12, text='Method Settings', command=lambda: master.switch_frame(AddMethod)).grid(row=2, rowspan=2, column=0)
b3 = Button(self, height=4, width=12, text='Start Analysis').grid(row=4,column=0)
b4 = Button(self, height=4, width=12, text='Data Handling').grid(row=5,column=0)
b5 = Button(self, height=4, width=12, text='Save Method').grid(row=6,column=0)
vidfrm = Frame(self, height=180, width=350, bd=1, relief=SUNKEN).grid(row=1, column=1, columnspan=2, rowspan=4)
###########################################################
graph = Graph(self).grid(row=5, column=1, rowspan=3, sticky='')
###########################################################
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
Я ожидаю, что график обновится из файла .txt и покажет временные и временные характеристики ЦП для отображения по осям x и y, в настоящее время отображается только статическая фигура. График также должен обновляться на обеих страницах (ручной метод и точка плавления).