[+] darken_color_rgb
This commit is contained in:
parent
949e425a31
commit
311fcf3595
@ -1,5 +1,15 @@
|
||||
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):
|
||||
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)
|
||||
@ -60,12 +70,12 @@ class CTkTableFrame(ctk.CTkFrame):
|
||||
header_label.pack(side="left", padx=4, pady=3)
|
||||
|
||||
@staticmethod
|
||||
def __row_enter(frame, e):
|
||||
frame.configure(fg_color="gray40")
|
||||
def __row_enter(frame, e, color="gray40"):
|
||||
frame.configure(fg_color=color)
|
||||
|
||||
@staticmethod
|
||||
def __row_leave(frame, e):
|
||||
frame.configure(fg_color="gray20")
|
||||
def __row_leave(frame, e, color="gray20"):
|
||||
frame.configure(fg_color=color)
|
||||
|
||||
def _build_row(self, row_index, row_data):
|
||||
_need_to_pack = []
|
||||
@ -149,6 +159,21 @@ class CTkTableFrame(ctk.CTkFrame):
|
||||
|
||||
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):
|
||||
row = self._rows[row_index]
|
||||
if new_data:
|
||||
@ -158,14 +183,11 @@ class CTkTableFrame(ctk.CTkFrame):
|
||||
for i, widget in enumerate(row.winfo_children()):
|
||||
widget.configure(text=str(data[i]))
|
||||
if color:
|
||||
for widget in (*row.winfo_children(), row):
|
||||
_edit_color(widget, row, color)
|
||||
row.configure(fg_color=color)
|
||||
if disable:
|
||||
def _disable(item):
|
||||
item.unbind("<Double-1>")
|
||||
item.unbind("<Enter>")
|
||||
item.unbind("<Leave>")
|
||||
_disable(row)
|
||||
for widget in row.winfo_children():
|
||||
for widget in (*row.winfo_children(), row):
|
||||
_disable(widget)
|
||||
self._rows_settings[row_index] = {"color": color, "disable": disable}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user