[~] FIX width

This commit is contained in:
Maxim Khomutov 2025-03-26 18:29:34 +03:00
parent d0df8cce2d
commit cf62a0e750

View File

@ -2,12 +2,15 @@ import customtkinter as ctk
def darken_color_rgb(hex_color, amount=30): def darken_color_rgb(hex_color, amount=30):
"""Затемняет цвет, вычитая значение из каждого компонента RGB""" """Затемняет цвет, вычитая значение из каждого компонента RGB"""
hex_color = hex_color.lstrip("#") try:
r, g, b = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4)) hex_color = hex_color.lstrip("#")
r, g, b = tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))
# Уменьшаем компоненты, не давая им уйти в минус
r, g, b = max(0, r - amount), max(0, g - amount), max(0, b - amount)
# Уменьшаем компоненты, не давая им уйти в минус
r, g, b = max(0, r - amount), max(0, g - amount), max(0, b - amount)
except Exception as e:
print(e, hex_color)
raise e
return f"#{r:02X}{g:02X}{b:02X}" return f"#{r:02X}{g:02X}{b:02X}"
class CTkTableFrame(ctk.CTkFrame): class CTkTableFrame(ctk.CTkFrame):
@ -44,6 +47,7 @@ class CTkTableFrame(ctk.CTkFrame):
def _prepare_columns(self): def _prepare_columns(self):
# Применяем шаблон значений по умолчанию # Применяем шаблон значений по умолчанию
default_column = {"width": 0, "align": "left", "name": "N/A"} default_column = {"width": 0, "align": "left", "name": "N/A"}
self._columns.clear()
for col in self.columns: for col in self.columns:
if type(col) == dict: if type(col) == dict:
if "width" not in col: if "width" not in col:
@ -65,16 +69,22 @@ class CTkTableFrame(ctk.CTkFrame):
def _build_header(self): def _build_header(self):
"""Создает заголовок таблицы.""" """Создает заголовок таблицы."""
header_frame = ctk.CTkFrame(self, fg_color="gray30", corner_radius=10) self.header_frame = ctk.CTkFrame(self, fg_color="gray30", corner_radius=10)
header_frame.pack(fill="x", padx=0, pady=1) self.header_frame.pack(fill="x", padx=0, pady=1)
# Заголовки # Заголовки
for col in self._columns: for col in self._columns:
header_label = ctk.CTkLabel( header_label = ctk.CTkLabel(
header_frame, text=col["name"], width=col["width"], anchor=col["align"], padx=5 self.header_frame, text=col["name"], width=col["width"], anchor=col["align"], padx=5
) )
header_label.pack(side="left", padx=4, pady=3) header_label.pack(side="left", padx=4, pady=3)
def _update_header(self):
"""Обновляет заголовок таблицы."""
for i, col in enumerate(self._columns):
header_label = self.header_frame.winfo_children()[i]
header_label.configure(width=col["width"], anchor=col["align"])
@staticmethod @staticmethod
def __row_enter(frame, e, color="gray40"): def __row_enter(frame, e, color="gray40"):
frame.configure(fg_color=color) frame.configure(fg_color=color)
@ -111,6 +121,8 @@ class CTkTableFrame(ctk.CTkFrame):
def create_table(self): def create_table(self):
"""Создает таблицу с заголовками и данными, используя параметры из словаря.""" """Создает таблицу с заголовками и данными, используя параметры из словаря."""
self._prepare_columns()
self._update_header()
self._rows = [None] * len(self._data) self._rows = [None] * len(self._data)
self._rows_settings = [None] * len(self._data) self._rows_settings = [None] * len(self._data)
loading = self.loading_frame.winfo_children()[0] loading = self.loading_frame.winfo_children()[0]