File size: 6,445 Bytes
7c7d442 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
import os
import sys
import sqlite3
import tkinter as tk
from tkinter import ttk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt
import matplotlib
SUPPORTED_FILE_TYPES = ['.sh', '.bat', '.ps1', '.cs', '.c', '.cpp', '.h', '.cmake', '.py', '.git', '.sql', '.csv', '.sqlite', '.lsl', '.html', '.xml', '.rtf']
# Globale Einstellung für Schriftgröße in Matplotlib um 10% verkleinern
matplotlib.rcParams.update({'font.size': plt.rcParams['font.size'] * 0.8})
class DatenVisualizer(tk.Tk):
def __init__(self, db_pfad):
super().__init__()
self.title("Daten Visualizer")
self.geometry("1200x720") # 20% größer
# Fenster für Anzahl der Zeichen
self.chars_window = tk.Toplevel(self)
self.chars_window.title("Anzahl der Zeichen")
self.chars_window.geometry("480x360") # 20% größer
self.chars_window.protocol("WM_DELETE_WINDOW", self.close_chars_window)
# Frame für die Anzahl der Zeichen
self.chars_frame = ttk.Frame(self.chars_window)
self.chars_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
# Anzahl der Zeichen pro Datei
self.anzeigen_anzahl_zeichen(db_pfad)
# Fenster für Qualität des Datensatzes
self.quality_window = tk.Toplevel(self)
self.quality_window.title("Qualität des Datensatzes")
self.quality_window.geometry("480x360") # 20% größer
self.quality_window.protocol("WM_DELETE_WINDOW", self.close_quality_window)
# Frame für die Qualität des Datensatzes
self.quality_frame = ttk.Frame(self.quality_window)
self.quality_frame.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
# Qualität des Datensatzes
self.anzeigen_qualität(db_pfad)
# Frame für den Treeview und die Datenvisualisierung
self.tree_frame = ttk.Frame(self)
self.tree_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
# Treeview für die Daten
self.tree = ttk.Treeview(self.tree_frame)
self.tree["columns"] = ("dateipfad", "anzahl_zeilen", "anzahl_zeichen", "long_text_mode", "dimensionalität")
self.tree.heading("#0", text="ID")
self.tree.heading("dateipfad", text="Dateipfad")
self.tree.heading("anzahl_zeilen", text="Anzahl Zeilen")
self.tree.heading("anzahl_zeichen", text="Anzahl Zeichen")
self.tree.heading("long_text_mode", text="Long Text Mode")
self.tree.heading("dimensionalität", text="Dimensionalität")
self.tree_scroll = ttk.Scrollbar(self.tree_frame, orient=tk.VERTICAL, command=self.tree.yview)
self.tree.configure(yscrollcommand=self.tree_scroll.set)
self.tree.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
self.tree_scroll.pack(side=tk.RIGHT, fill=tk.Y)
self.lade_daten_aus_db(db_pfad)
def lade_daten_aus_db(self, db_pfad):
try:
with sqlite3.connect(db_pfad) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM dateiparameter")
daten = cursor.fetchall()
for row in daten:
self.tree.insert("", tk.END, values=row)
except sqlite3.Error as e:
print(f"SQLite Fehler: {e}")
except Exception as e:
print(f"Allgemeiner Fehler: {e}")
def anzeigen_anzahl_zeichen(self, db_pfad):
try:
with sqlite3.connect(db_pfad) as conn:
cursor = conn.cursor()
cursor.execute("SELECT dateipfad, anzahl_zeichen FROM dateiparameter")
daten = cursor.fetchall()
# Matplotlib Grafik für Anzahl Zeichen pro Datei
plot_figure_chars = plt.Figure(figsize=(6, 4.5), dpi=100) # 20% größer
plot_ax_chars = plot_figure_chars.add_subplot(111)
plot_ax_chars.bar([row[0] for row in daten], [int(row[1]) for row in daten], color='orange')
plot_ax_chars.set_xlabel("Dateipfad")
plot_ax_chars.set_ylabel("Anzahl Zeichen")
plot_canvas_chars = FigureCanvasTkAgg(plot_figure_chars, master=self.chars_frame)
plot_canvas_chars.get_tk_widget().pack()
except sqlite3.Error as e:
print(f"SQLite Fehler: {e}")
except Exception as e:
print(f"Allgemeiner Fehler: {e}")
def anzeigen_qualität(self, db_pfad):
try:
with sqlite3.connect(db_pfad) as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM dateiparameter")
daten = cursor.fetchall()
# Berechnung der Qualität des Datensatzes
anzahl_dateien = len(daten)
durchschnittliche_anzahl_zeichen = sum(int(row[3]) for row in daten) / anzahl_dateien if anzahl_dateien > 0 else 0
durchschnittliche_anzahl_zeilen = sum(int(row[2]) for row in daten) / anzahl_dateien if anzahl_dateien > 0 else 0
# Matplotlib Grafik für Qualität
plot_figure_quality = plt.Figure(figsize=(6, 4.5), dpi=100) # 20% größer
plot_ax_quality = plot_figure_quality.add_subplot(111)
plot_ax_quality.bar(["Durchschnittliche Anzahl Zeichen", "Durchschnittliche Anzahl Zeilen"], [durchschnittliche_anzahl_zeichen, durchschnittliche_anzahl_zeilen], color=['skyblue', 'lightgreen'])
plot_ax_quality.set_xlabel("Metrik")
plot_ax_quality.set_ylabel("Durchschnittswerte")
plot_canvas_quality = FigureCanvasTkAgg(plot_figure_quality, master=self.quality_frame)
plot_canvas_quality.get_tk_widget().pack()
except sqlite3.Error as e:
print(f"SQLite Fehler: {e}")
except Exception as e:
print(f"Allgemeiner Fehler: {e}")
def close_chars_window(self):
self.chars_window.destroy()
def close_quality_window(self):
self.quality_window.destroy()
def main(db_pfad):
try:
daten_visualizer = DatenVisualizer(db_pfad)
daten_visualizer.mainloop()
except Exception as e:
print(f"Fehler beim Hauptprogramm: {e}")
if __name__ == "__main__":
# Verzeichnispfad als Argument übergeben, falls vorhanden
if len(sys.argv) > 1:
db_pfad = sys.argv[1]
else:
print("Bitte geben Sie den Pfad zur SQLite-Datenbank als Argument an.")
sys.exit(1)
main(db_pfad)
|