commit 37

This commit is contained in:
2025-08-01 10:52:48 +02:00
parent e3bb68f7e2
commit af7dcc31e4
2 changed files with 42 additions and 17 deletions

View File

@@ -1,4 +1,3 @@
""" Classes Method and Functions for lx Apps """ """ Classes Method and Functions for lx Apps """
import logging import logging
@@ -327,7 +326,8 @@ class ConfigManager:
"""Load the config file and return the config as dict""" """Load the config file and return the config as dict"""
if not cls._config: if not cls._config:
try: try:
lines = Path(cls._config_file).read_text(encoding="utf-8").splitlines() lines = Path(cls._config_file).read_text(
encoding="utf-8").splitlines()
cls._config = { cls._config = {
"updates": lines[1].strip(), "updates": lines[1].strip(),
"theme": lines[3].strip(), "theme": lines[3].strip(),
@@ -406,21 +406,38 @@ class ThemeManager:
class Tooltip: class Tooltip:
def __init__(self, widget, text, wraplength=250): def __init__(self, widget, text, wraplength=250, state_var=None):
self.widget = widget self.widget = widget
self.text = text self.text = text
self.wraplength = wraplength self.wraplength = wraplength
self.state_var = state_var
self.tooltip_window = None self.tooltip_window = None
self.id = None self.id = None
self.update_bindings()
if self.state_var:
self.state_var.trace_add("write", self.update_bindings)
def update_bindings(self, *args):
self.widget.unbind("<Enter>")
self.widget.unbind("<Leave>")
self.widget.unbind("<ButtonPress>")
if self.state_var is None or self.state_var.get():
self.widget.bind("<Enter>", self.enter) self.widget.bind("<Enter>", self.enter)
self.widget.bind("<Leave>", self.leave) self.widget.bind("<Leave>", self.leave)
self.widget.bind("<ButtonPress>", self.leave) self.widget.bind("<ButtonPress>", self.leave)
def enter(self, event=None): self.schedule() def enter(self, event=None):
def leave(self, event=None): self.unschedule(); self.hide_tooltip() if self.state_var is None or self.state_var.get():
self.schedule()
def schedule(self): self.unschedule( def leave(self, event=None):
); self.id = self.widget.after(250, self.show_tooltip) self.unschedule()
self.hide_tooltip()
def schedule(self):
self.unschedule()
self.id = self.widget.after(250, self.show_tooltip)
def unschedule(self): def unschedule(self):
id = self.id id = self.id
@@ -429,12 +446,14 @@ class Tooltip:
self.widget.after_cancel(id) self.widget.after_cancel(id)
def show_tooltip(self, event=None): def show_tooltip(self, event=None):
if self.tooltip_window or not self.text:
return
x, y, _, _ = self.widget.bbox("insert") x, y, _, _ = self.widget.bbox("insert")
x += self.widget.winfo_rootx() + 25 x += self.widget.winfo_rootx() + 25
y += self.widget.winfo_rooty() + 20 y += self.widget.winfo_rooty() + 20
self.tooltip_window = tw = tk.Toplevel(self.widget) self.tooltip_window = tw = tk.Toplevel(self.widget)
tw.wm_overrideredirect(True) tw.wm_overrideredirect(True)
tw.wm_geometry(f"+{x}+{y}") tw.wm_geometry(f"+" + str(x) + "+" + str(y))
label = ttk.Label(tw, text=self.text, justify=tk.LEFT, background="#FFFFE0", foreground="black", label = ttk.Label(tw, text=self.text, justify=tk.LEFT, background="#FFFFE0", foreground="black",
relief=tk.SOLID, borderwidth=1, wraplength=self.wraplength, padding=(4, 2, 4, 2)) relief=tk.SOLID, borderwidth=1, wraplength=self.wraplength, padding=(4, 2, 4, 2))
label.pack(ipadx=1) label.pack(ipadx=1)
@@ -455,17 +474,17 @@ class LogConfig:
mode="a", mode="a",
encoding="utf-8", encoding="utf-8",
) )
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") formatter = logging.Formatter(
"%(asctime)s - %(levelname)s - %(message)s")
file_handler.setFormatter(formatter) file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG) file_handler.setLevel(logging.DEBUG)
logger = logging.getLogger() logger = logging.getLogger()
logger.addHandler(file_handler) logger.addHandler(file_handler)
import os
class IconManager: class IconManager:
def __init__(self, base_path='/usr/share/icons/lx-icons'): def __init__(self, base_path='/usr/share/icons/lx-icons/'):
self.base_path = base_path self.base_path = base_path
self.icons = {} self.icons = {}
self._define_icon_paths() self._define_icon_paths()
@@ -615,7 +634,13 @@ class IconManager:
except tk.TclError as e: except tk.TclError as e:
print(f"Error loading icon '{key}' from '{full_path}': {e}") print(f"Error loading icon '{key}' from '{full_path}': {e}")
size = 32 # Default size size = 32 # Default size
if '16' in rel_path: size = 16 if '16' in rel_path:
elif '48' in rel_path: size = 48 size = 16
elif '64' in rel_path: size = 64 elif '48' in rel_path:
size = 48
elif '64' in rel_path:
size = 64
self.icons[key] = tk.PhotoImage(width=size, height=size) self.icons[key] = tk.PhotoImage(width=size, height=size)
def get_icon(self, name):
return self.icons.get(name)