Tkinter Fenster in einem bestimmten zeitlichen Intervall aktualisieren

Fragen zu Tkinter.
Antworten
NinoBaumann
User
Beiträge: 77
Registriert: Samstag 25. April 2020, 19:03

Hallo zusammen,

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()
NinoBaumann
User
Beiträge: 77
Registriert: Samstag 25. April 2020, 19:03

Wundert Euch bitte nicht, dass der Beitrag von mir doppelt erstellt wurde. Ich hatte im anderen die Überschrift vergessen richtig auszufüllen. Deswegen der neue Beitrag. Habe es jedoch schon einem Admin gemeldet, dass er den anderen Post schließen kann.
Antworten