_anonymous0815_
Lt. Commander
- Registriert
- Aug. 2020
- Beiträge
- 1.406
Hallo liebes Forum,
seit ein paar Wochen lerne ich Python und habe mich für ein erstes, für mich reales Projekt ins Auge gefasst, was relativ trivial ist.
Ich habe einen Laptop mit Windows 11 und vermisse eine Akkuanzeige in Prozent im Benachrichtungsfeld, erst der Hover des Akkusymbols offenbart den Wert, ich möchte diesen direkt als Icon ausgeben.
Das sieht dann so aus:
Ich poste nachfolgend mal die knapp 60 Zeilen Code:
Das Problem auf das ich stoße, ist, dass nach ein paar Minuten eine Exception beim Debuggen geworfen wird, dass der Zugriff auf das icon.ico verweigert wird. Ich vermute, dass das passiert, weil zu häufig (aller 5 Sekunden) eine Speicher-Operation ausgeführt wird und suche nach einem Weg, dies gerade zu rücken.
Mir geht es hier explizit nicht um eine Bewertung des Codes, sicher lässt sich dieser besser strukturieren, aber das ist gerade für mich nebensächlich.
Ich bin für jeden Lösungsvorschlag dankbar.
Update: Ich glaube der Fehler liegt woanders, ich habe den Code vor kurzem umstrukturiert und es scheint wohl eher damit ein Problem zu geben, denn beim aktuellen Debugging kommt keine Exception, einer Aktualisierung des Icons findet aber nicht statt.
seit ein paar Wochen lerne ich Python und habe mich für ein erstes, für mich reales Projekt ins Auge gefasst, was relativ trivial ist.
Ich habe einen Laptop mit Windows 11 und vermisse eine Akkuanzeige in Prozent im Benachrichtungsfeld, erst der Hover des Akkusymbols offenbart den Wert, ich möchte diesen direkt als Icon ausgeben.
Das sieht dann so aus:
Ich poste nachfolgend mal die knapp 60 Zeilen Code:
Python:
from psutil import sensors_battery
from time import sleep
from PIL import Image, ImageDraw, ImageFont
from sys import exit
from infi.systray import SysTrayIcon
from os import getcwd
import pkg_resources
basedir=str(getcwd())+'\\icon.ico'
batterie_prozent=str(sensors_battery().percent)
fontname = "arial.ttf"
iconsize = 256
colorText='white'
class tray_icon_controller:
def __init__(self, basedir, batterie_prozent):
self.menu_options = None
self.systray = SysTrayIcon(basedir, "Batterieladung in Prozent {}%".format(batterie_prozent), self.menu_options, on_quit=self.close())
self.systray.start()
def update(self, basedir, batterie_prozent):
self.systray.update(basedir, "Batterieladung in Prozent {}%".format(batterie_prozent))
def close(systray):
SysTrayIcon.shutdown
def color(batterie_prozent):
if int(batterie_prozent) >= 80:
return 'lightgreen'
elif int(batterie_prozent) >= 30 and int(batterie_prozent) < 80:
return 'yellow'
elif int(batterie_prozent) >= 10 and int(batterie_prozent) < 30:
return 'orange'
elif int(batterie_prozent) < 10:
return 'red'
else:
return 'white'
def image(fontname, fontsize, text, colorText, iconsize, basedir ):
if int(batterie_prozent) == 100:
fontsize=155
font = ImageFont.truetype(fontname, fontsize)
img = Image.new('RGBA', (iconsize, iconsize), color=(255,255,255,0))
d = ImageDraw.Draw(img)
d.text((0,0), text, fill=colorText, font=font)
img.save(basedir, sizes=[(iconsize,iconsize)])
icon=tray_icon_controller(basedir, batterie_prozent)
while True:
batterie_prozent=str(sensors_battery().percent)
fontsize = 230
text = batterie_prozent
image(fontnageme, fontsize, text, color(batterie_prozent), iconsize, basedir)
icon.update(basedir, batterie_prozent)
if icon.close:
exit()
sleep(5)
Das Problem auf das ich stoße, ist, dass nach ein paar Minuten eine Exception beim Debuggen geworfen wird, dass der Zugriff auf das icon.ico verweigert wird. Ich vermute, dass das passiert, weil zu häufig (aller 5 Sekunden) eine Speicher-Operation ausgeführt wird und suche nach einem Weg, dies gerade zu rücken.
Mir geht es hier explizit nicht um eine Bewertung des Codes, sicher lässt sich dieser besser strukturieren, aber das ist gerade für mich nebensächlich.
Ich bin für jeden Lösungsvorschlag dankbar.
Ergänzung ()
Update: Ich glaube der Fehler liegt woanders, ich habe den Code vor kurzem umstrukturiert und es scheint wohl eher damit ein Problem zu geben, denn beim aktuellen Debugging kommt keine Exception, einer Aktualisierung des Icons findet aber nicht statt.
Zuletzt bearbeitet: