-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwidget.py
99 lines (80 loc) · 3.59 KB
/
widget.py
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
import tkinter as tk
from tkinter import ttk
import time
import threading
import get_info
# Aggiornamento dei dati
def update_info():
global last_update_label
ink_levels, paper_levels = get_info.get_info()
if ink_levels and paper_levels:
# Aggiorna testo e barre del toner
for color, value in zip(["Black", "Cyan", "Magenta", "Yellow"], ink_levels):
toner_labels[color].set(f"{color}: {value:.0f}%")
toner_bars[color]["value"] = value # Imposta il valore della barra
# Aggiorna testo dei vassoi
tray_labels[1].set(f"Vassoio 1 - A4: {paper_levels[0]}%")
tray_labels[2].set(f"Vassoio 2 - A4: {paper_levels[1]}%")
tray_labels[3].set(f"Vassoio 3 - A3: {paper_levels[2]}%")
# Aggiorna il timestamp
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
last_update_label.set(f"Aggiornato: {timestamp}")
else:
last_update_label.set("Errore durante l'aggiornamento")
# Aggiornamento automatico ogni 30 minuti
def auto_update():
while True:
time.sleep(30 * 60)
update_info()
# Interfaccia Grafica
root = tk.Tk()
root.title("RICOH IM C3010")
root.geometry("250x340")
root.resizable(False,False)
# Layout
frame = ttk.Frame(root, padding=10)
frame.pack(fill="both", expand=True)
# Configura uno stile per ogni colore della progress bar
style = ttk.Style()
style.theme_use("default") # Usa il tema base per personalizzazioni
# Stili per i diversi colori
style.configure("Black.Horizontal.TProgressbar", troughcolor="white", background="black")
style.configure("Cyan.Horizontal.TProgressbar", troughcolor="white", background="cyan")
style.configure("Magenta.Horizontal.TProgressbar", troughcolor="white", background="magenta")
style.configure("Yellow.Horizontal.TProgressbar", troughcolor="white", background="yellow")
# Sezione toner con miglior allineamento
ttk.Label(frame, text="Livelli Toner", font=("Arial", 14, "bold")).pack(pady=5)
toner_labels = {}
toner_bars = {}
for i, color in enumerate(["Black", "Cyan", "Magenta", "Yellow"]):
# Frame per organizzare label e barra
frame_toner = ttk.Frame(frame)
frame_toner.pack(fill="x", pady=2, padx=10)
# Label per il testo con la percentuale (fissa a sinistra)
toner_labels[color] = tk.StringVar(value=f"{color}: ---")
label = ttk.Label(frame_toner, textvariable=toner_labels[color], font=("Arial", 10), width=12, anchor="w")
label.grid(row=0, column=0, padx=5, sticky="w")
# Barra per rappresentare graficamente il livello (espandibile)
toner_bars[color] = ttk.Progressbar(
frame_toner, orient="horizontal", length=100, mode="determinate",
style=f"{color}.Horizontal.TProgressbar"
)
toner_bars[color].grid(row=0, column=1, padx=5, sticky="ew")
# Configura la colonna 1 per essere ridimensionabile
frame_toner.columnconfigure(1, weight=1)
# Sezione vassoi
ttk.Label(frame, text="Livelli Carta", font=("Arial", 14, "bold")).pack(pady=10)
tray_labels = {}
for i in range(1, 4):
tray_labels[i] = tk.StringVar(value=f"Vassoio {i}: ---")
ttk.Label(frame, textvariable=tray_labels[i], font=("Arial", 12)).pack(anchor="w", padx=20)
# Timestamp ultimo aggiornamento OK
last_update_label = tk.StringVar(value="Ultimo aggiornamento: ---")
ttk.Label(frame, textvariable=last_update_label, font=("Arial", 10, "italic")).pack(pady=10)
# Pulsante aggiorna OK
ttk.Button(frame, text="AGGIORNA", command=update_info).pack(pady=10)
# Thread per aggiornamento automatico
threading.Thread(target=auto_update, daemon=True).start()
# Avvia l'interfaccia grafica
update_info() # Aggiorna i dati all'avvio
root.mainloop()