[+] darken_color_rgb
This commit is contained in:
parent
949e425a31
commit
311fcf3595
@ -1,5 +1,15 @@
|
|||||||
import customtkinter as ctk
|
import customtkinter as ctk
|
||||||
|
|
||||||
|
def darken_color_rgb(hex_color, amount=30):
|
||||||
|
"""Затемняет цвет, вычитая значение из каждого компонента RGB"""
|
||||||
|
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)
|
||||||
|
|
||||||
|
return f"#{r:02X}{g:02X}{b:02X}"
|
||||||
|
|
||||||
class CTkTableFrame(ctk.CTkFrame):
|
class CTkTableFrame(ctk.CTkFrame):
|
||||||
def __init__(self, master: ctk.CTk | ctk.CTkToplevel, columns, data: list, callback, settings_callback=None, width=400, height=200, *args, **kwargs):
|
def __init__(self, master: ctk.CTk | ctk.CTkToplevel, columns, data: list, callback, settings_callback=None, width=400, height=200, *args, **kwargs):
|
||||||
super().__init__(master, *args, **kwargs)
|
super().__init__(master, *args, **kwargs)
|
||||||
@ -60,12 +70,12 @@ class CTkTableFrame(ctk.CTkFrame):
|
|||||||
header_label.pack(side="left", padx=4, pady=3)
|
header_label.pack(side="left", padx=4, pady=3)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __row_enter(frame, e):
|
def __row_enter(frame, e, color="gray40"):
|
||||||
frame.configure(fg_color="gray40")
|
frame.configure(fg_color=color)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __row_leave(frame, e):
|
def __row_leave(frame, e, color="gray20"):
|
||||||
frame.configure(fg_color="gray20")
|
frame.configure(fg_color=color)
|
||||||
|
|
||||||
def _build_row(self, row_index, row_data):
|
def _build_row(self, row_index, row_data):
|
||||||
_need_to_pack = []
|
_need_to_pack = []
|
||||||
@ -149,6 +159,21 @@ class CTkTableFrame(ctk.CTkFrame):
|
|||||||
|
|
||||||
def edit(self, row_index, new_data=None, color=None, disable=False, **__):
|
def edit(self, row_index, new_data=None, color=None, disable=False, **__):
|
||||||
"""Редактирует строку по индексу."""
|
"""Редактирует строку по индексу."""
|
||||||
|
|
||||||
|
def _disable_colors(widget):
|
||||||
|
widget.unbind("<Enter>")
|
||||||
|
widget.unbind("<Leave>")
|
||||||
|
|
||||||
|
def _disable(widget):
|
||||||
|
widget.unbind("<Double-1>")
|
||||||
|
_disable_colors(widget)
|
||||||
|
|
||||||
|
def _edit_color(widget, row, color):
|
||||||
|
_disable_colors(widget)
|
||||||
|
col_back = darken_color_rgb(color, 30)
|
||||||
|
widget.bind("<Leave>", lambda e: self.__row_leave(row, e, color))
|
||||||
|
widget.bind("<Enter>", lambda e: self.__row_enter(row, e, col_back))
|
||||||
|
|
||||||
if 0 <= row_index < len(self._data):
|
if 0 <= row_index < len(self._data):
|
||||||
row = self._rows[row_index]
|
row = self._rows[row_index]
|
||||||
if new_data:
|
if new_data:
|
||||||
@ -158,14 +183,11 @@ class CTkTableFrame(ctk.CTkFrame):
|
|||||||
for i, widget in enumerate(row.winfo_children()):
|
for i, widget in enumerate(row.winfo_children()):
|
||||||
widget.configure(text=str(data[i]))
|
widget.configure(text=str(data[i]))
|
||||||
if color:
|
if color:
|
||||||
|
for widget in (*row.winfo_children(), row):
|
||||||
|
_edit_color(widget, row, color)
|
||||||
row.configure(fg_color=color)
|
row.configure(fg_color=color)
|
||||||
if disable:
|
if disable:
|
||||||
def _disable(item):
|
for widget in (*row.winfo_children(), row):
|
||||||
item.unbind("<Double-1>")
|
|
||||||
item.unbind("<Enter>")
|
|
||||||
item.unbind("<Leave>")
|
|
||||||
_disable(row)
|
|
||||||
for widget in row.winfo_children():
|
|
||||||
_disable(widget)
|
_disable(widget)
|
||||||
self._rows_settings[row_index] = {"color": color, "disable": disable}
|
self._rows_settings[row_index] = {"color": color, "disable": disable}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user