new detect_color_of_master function on all widgets

This commit is contained in:
TomSchimansky
2022-04-09 21:23:35 +02:00
parent cdbf2382ef
commit 7cdf3fd98d
11 changed files with 149 additions and 93 deletions

View File

@@ -149,27 +149,19 @@ class CTkButton(tkinter.Frame):
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
elif isinstance(self.master, ttk.Frame): # master is ttk widget
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#000000"
elif isinstance(self.master, ttk.LabelFrame):
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'foreground')
except Exception:
return "#000000"
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#000000"
return "#FFFFFF", "#000000"
def draw(self, no_color_updates=False):
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
import sys
from customtkinter.customtkinter_tk import CTk
@@ -140,10 +141,24 @@ class CTkCheckBox(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def draw(self):
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
from .customtkinter_tk import CTk
from .customtkinter_frame import CTkFrame
@@ -111,13 +112,24 @@ class CTkEntry(tkinter.Frame):
self.grid_columnconfigure(0, weight=1)
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
return self.master.cget("bg")
except:
pass
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def update_dimensions(self, event):
# only redraw if dimensions changed (for performance)

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
from .customtkinter_tk import CTk
from .appearance_mode_tracker import AppearanceModeTracker
@@ -94,10 +95,24 @@ class CTkFrame(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def update_dimensions(self, event):
# only redraw if dimensions changed (for performance)

View File

@@ -1,5 +1,5 @@
import tkinter
import sys
import tkinter.ttk as ttk
from .customtkinter_tk import CTk
from .customtkinter_frame import CTkFrame
@@ -99,10 +99,24 @@ class CTkLabel(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def update_dimensions(self, event):
# only redraw if dimensions changed (for performance)

View File

@@ -1,5 +1,6 @@
import sys
import tkinter
import tkinter.ttk as ttk
from .customtkinter_tk import CTk
from .customtkinter_frame import CTkFrame
@@ -96,10 +97,24 @@ class CTkProgressBar(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
@staticmethod
def calc_optimal_height(user_height):

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
import sys
from customtkinter.customtkinter_tk import CTk
@@ -135,10 +136,24 @@ class CTkRadioButton(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def draw(self):
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
import sys
from .customtkinter_tk import CTk
@@ -134,10 +135,24 @@ class CTkSlider(tkinter.Frame):
self.grid_columnconfigure(0, weight=1)
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
@staticmethod
def calc_optimal_height(user_height):

View File

@@ -1,4 +1,5 @@
import tkinter
import tkinter.ttk as ttk
import sys
from .customtkinter_tk import CTk
@@ -134,10 +135,24 @@ class CTkSwitch(tkinter.Frame):
super().destroy()
def detect_color_of_master(self):
if isinstance(self.master, CTkFrame):
""" detect color of self.master widget to set correct bg_color """
if isinstance(self.master, CTkFrame): # master is CTkFrame
return self.master.fg_color
else:
return self.master.cget("bg")
elif isinstance(self.master, (ttk.Frame, ttk.LabelFrame, ttk.Notebook)): # master is ttk widget
print("button on", self.master.winfo_class())
try:
ttk_style = ttk.Style()
return ttk_style.lookup(self.master.winfo_class(), 'background')
except Exception:
return "#FFFFFF", "#000000"
else: # master is normal tkinter widget
try:
return self.master.cget("bg") # try to get bg color by .cget() method
except Exception:
return "#FFFFFF", "#000000"
def draw(self, color_updates=True):