Есть ли способ, чтобыPython

Программы на Python
Гость
Есть ли способ, чтобы

Сообщение Гость »

Помилуйте меня, я начал программировать на Python для университетского проекта 3 недели назад, я знаю, что мой код не очень хорош, но, по крайней мере, в принципе он работает.
Сейчас я работаю над проектом, в котором Мне нужно выбрать случайный файл из 74 файлов CSV и визуализировать его с помощью Python и matplotlib. У меня все хорошо, я обернул визуализацию в графический интерфейс Tinker, и график выглядит очень хорошо. Одним из требований проекта является то, что мне нужно иметь возможность установить время, в течение которого будет происходить визуализация. единственная проблема в том, что анимация занимает больше времени, чем я хочу установить.
Это мой код:

Код: Выделить всё

import tkinter as tk
from tkinter import ttk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import os
import random

class AnimationGUI:
def __init__(self, root):
self.root = root
self.root.title("Animation GUI")
self.fig, self.ax = plt.subplots()

# Verzeichnis aus dem Csv Dateien eingelesen werden
os.chdir('C:\\Users\\hoppel\\Documents\\CSV Profile 2')

# Einlesen der Csv Datei
self.number = random.randint(1, 74)
dateiend = '.csv'
Datei = str(self.number) + dateiend
self.Daten = pd.read_csv(Datei, sep=';')
self.Daten['Uhrzeit'] = pd.to_datetime(self.Daten['Uhrzeit'], format='%H:%M:%S')
self.max_verbrauch = self.Daten['Verbrauch'].max()

# GUI-Elemente erstellen
self.canvas = FigureCanvasTkAgg(self.fig, master=root)
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

self.start_button = ttk.Button(root, text="Start", command=self.start_animation)
self.start_button.pack(side=tk.LEFT)

self.stop_button = ttk.Button(root, text="Stop", command=self.stop_animation)
self.stop_button.pack(side=tk.LEFT)

self.duration_label = ttk.Label(root, text="Animationsdauer (Minuten):")
self.duration_label.pack(side=tk.LEFT)

self.duration_entry = ttk.Entry(root)
self.duration_entry.insert(0, "5")  # Default value
self.duration_entry.pack(side=tk.LEFT)

# Zeitdaten als Label erstellen
self.time_label = ttk.Label(root, text="Zeitdaten")
self.time_label.pack(side=tk.TOP)

self.time_data_label = ttk.Label(root, text="")
self.time_data_label.pack(side=tk.TOP)

self.ani = None

def plotfunc(self, i):
index = int(i * len(self.Daten) / self.num_frames)
window_start = max(index - 15 * 60, 0)
window_end = min(index, len(self.Daten) - 1)
window_data = self.Daten.iloc[window_start:window_end]

self.ax.cla()
lines, = self.ax.plot(window_data['Uhrzeit'], window_data['Verbrauch'], color='red')
self.ax.set_xlabel('Zeitraum')
self.ax.set_ylabel('Verbrauch')
self.ax.set_title('Tagesverbrauch ' + str(self.number))
self.ax.set_ylim(0, self.max_verbrauch + 30)
self.ax.set_xlim
self.ax.set_xticks([])
self.ax.set_facecolor('black')

# Aktualisieren der Zeitdaten
current_time = self.Daten.iloc[index]['Uhrzeit']
self.time_data_label.config(text=current_time.strftime("%H:%M:%S"))

return [lines]

def start_animation(self):
duration_minutes = int(self.duration_entry.get())
fps = 40
self.num_frames = int(fps * 60 * duration_minutes)

if self.ani is None:
self.ani = FuncAnimation(self.fig, self.plotfunc, frames=self.num_frames, interval=1000 / fps, blit=True)
else:
self.ani.event_source.start()

def stop_animation(self):
if self.ani is not None:
self.ani.event_source.stop()

root = tk.Tk()
app = AnimationGUI(root)
root.mainloop()

Данные CSV организованы следующим образом:

Код: Выделить всё

Uhrzeit;Verbrauch
00:00:01;252
00:00:02;252
00:00:03;252
00:00:04;252
00:00:05;252
00:00:06;252
00:00:07;251
00:00:08;251
00:00:09;251
и 24 часа представлены в 86400 секундах со значением для каждой секунды справа

Источник: https://stackoverflow.com/questions/781 ... e-a-way-to

Вернуться в «Python»