ich bin in einem Industrieunternehmen tätig und bin gerade dran für die Produktion ein Prozess-Monitoring zu erstellen. Die Rohdaten werden von der Produktion laufend in eine CSV-Datei geschrieben. Diese CSV-Datei lese ich in ein Dataframe ein und übergebe dieses einer Klasse "Monitoring". In dieser werden verschiedene Produktionskennzahlen berechnet, die Ergebnisse in Labels geschrieben und dann noch ein Diagramm erstellt, in welchem ich zwei Spalten aus dem Dataframe plotte. Die CSV-Datei wird ständig aktualisiert. Dementsprechend möchte ich, dass sich das Monitoring Fenster auch in einem bestimmten zeitlichen Intervall aktualisiert. Ich habe von der after() Möglichkeit gelesen. Ich weiß aber nicht, wie ich diese bei mir einbauen kann oder ob das überhaupt der richtige Ansatz ist. Ich wäre dankbar für Eure Hilfe. Nachfolgend der Code. Da dieser recht umfangreich ist, habe ich ihn hier im Post auf das Wichtigste beschränkt.
Code: Alles auswählen
import tkinter as tk
from tkinter import ttk
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
from matplotlib.backends.backend_tkagg import (FigureCanvasTkAgg, NavigationToolbar2Tk)
class Monitoring(ttk.Frame):
def __init__(self, parent, s_headline, df_EoL_data):
tk.Frame.__init__(self, parent, highlightbackground='black', highlightthickness=1)
self.df_Data_GM = df_EoL_data
# Headline
self.frame_headline = ttk.Frame(self)
self.frame_headline.grid(row=0, column=0)
self.label_headline = ttk.Label(self.frame_headline, text=s_headline, anchor='center', background='gray46', width=37, font=('Arial', 20))
self.label_headline.grid(row=0, column=0, pady=(0,20))
# Main information
self.frame_main_information = ttk.Frame(self)
self.frame_main_information.grid(row=1, column=0, pady=(0,20))
.
.
# Hier kommt die Berechnung der Kennzahlen
.
.
self.label_order = ttk.Label(self.frame_main_information, text='Auftrag')
self.label_order.grid(row=0, column=0)
self.label_order_1 = ttk.Label(self.frame_main_information, text=self.s_order)
self.label_order_1.grid(row=0, column=1)
.
.
# Hier folgen noch viele Labels
.
.
# Diagramm
self.frame_chart = ttk.Frame(self)
self.frame_chart.grid(row=2, column=0)
self.a_scatter_colors = ['red' if x==1 or y==1 else 'green' for x,y in zip(self.df_Data_GM['BM_niO'], self.df_Data_GM['AS_niO'])]
self.a_scatter_sizes = [15 if i <= self.n_latest_X_values-1 else 1 for i in range(len(self.df_Data_GM))]
self.a_scatter_edgecolors = ['black' if i <= self.n_latest_X_values-1 else 'none' for i in range(len(self.df_Data_GM))]
self.fig1, self.ax = plt.subplots(figsize=(7.5, 6.5))
self.ax.scatter(list(self.df_Data_GM['Beugemoment']), list(self.df_Data_GM['Axialspiel']), color=self.a_scatter_colors, s=self.a_scatter_sizes, edgecolor=self.a_scatter_edgecolors)
self.ax.set_xlabel('Beugemoment [Nm]', fontsize=12)
self.ax.set_ylabel('Axialspiel [mm]', fontsize=12)
self.ax.grid()
self.canvas = FigureCanvasTkAgg(self.fig1, master = self.frame_chart)
self.canvas.draw()
self.canvas.get_tk_widget().grid(row=0, column=0)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.title('Monitoring Gelenkmontageanlagen')
self.df_Data_GM = pd.read_csv('I:\SharedFolders\HA_Gelenkmontage\EoL_Monitoring\Data_7370_7670_7517_GM1_EoL.csv')
self.monitoring_window = Monitoring(self, 'EoL 1', self.df_Data_GM)
self.monitoring_window.grid(row=0, column=0)
if __name__ == "__main__":
app = App()
app.mainloop()