mirror of
https://github.com/TomSchimansky/CustomTkinter.git
synced 2023-08-10 21:13:13 +03:00
new detect_color_of_master function on all widgets
This commit is contained in:
parent
cdbf2382ef
commit
7cdf3fd98d
@ -149,27 +149,19 @@ class CTkButton(tkinter.Frame):
|
|||||||
if isinstance(self.master, CTkFrame): # master is CTkFrame
|
if isinstance(self.master, CTkFrame): # master is CTkFrame
|
||||||
return self.master.fg_color
|
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())
|
print("button on", self.master.winfo_class())
|
||||||
try:
|
try:
|
||||||
ttk_style = ttk.Style()
|
ttk_style = ttk.Style()
|
||||||
return ttk_style.lookup(self.master.winfo_class(), 'background')
|
return ttk_style.lookup(self.master.winfo_class(), 'background')
|
||||||
except Exception:
|
except Exception:
|
||||||
return "#000000"
|
return "#FFFFFF", "#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"
|
|
||||||
|
|
||||||
else: # master is normal tkinter widget
|
else: # master is normal tkinter widget
|
||||||
try:
|
try:
|
||||||
return self.master.cget("bg") # try to get bg color by .cget() method
|
return self.master.cget("bg") # try to get bg color by .cget() method
|
||||||
except Exception:
|
except Exception:
|
||||||
return "#000000"
|
return "#FFFFFF", "#000000"
|
||||||
|
|
||||||
def draw(self, no_color_updates=False):
|
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)
|
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from customtkinter.customtkinter_tk import CTk
|
from customtkinter.customtkinter_tk import CTk
|
||||||
@ -140,10 +141,24 @@ class CTkCheckBox(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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):
|
def draw(self):
|
||||||
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)
|
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
from .customtkinter_frame import CTkFrame
|
from .customtkinter_frame import CTkFrame
|
||||||
@ -111,13 +112,24 @@ class CTkEntry(tkinter.Frame):
|
|||||||
self.grid_columnconfigure(0, weight=1)
|
self.grid_columnconfigure(0, weight=1)
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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:
|
try:
|
||||||
return self.master.cget("bg")
|
ttk_style = ttk.Style()
|
||||||
except:
|
return ttk_style.lookup(self.master.winfo_class(), 'background')
|
||||||
pass
|
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):
|
def update_dimensions(self, event):
|
||||||
# only redraw if dimensions changed (for performance)
|
# only redraw if dimensions changed (for performance)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
from .appearance_mode_tracker import AppearanceModeTracker
|
from .appearance_mode_tracker import AppearanceModeTracker
|
||||||
@ -94,10 +95,24 @@ class CTkFrame(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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):
|
def update_dimensions(self, event):
|
||||||
# only redraw if dimensions changed (for performance)
|
# only redraw if dimensions changed (for performance)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
import sys
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
from .customtkinter_frame import CTkFrame
|
from .customtkinter_frame import CTkFrame
|
||||||
@ -99,10 +99,24 @@ class CTkLabel(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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):
|
def update_dimensions(self, event):
|
||||||
# only redraw if dimensions changed (for performance)
|
# only redraw if dimensions changed (for performance)
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import sys
|
import sys
|
||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
from .customtkinter_frame import CTkFrame
|
from .customtkinter_frame import CTkFrame
|
||||||
@ -96,10 +97,24 @@ class CTkProgressBar(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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
|
@staticmethod
|
||||||
def calc_optimal_height(user_height):
|
def calc_optimal_height(user_height):
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from customtkinter.customtkinter_tk import CTk
|
from customtkinter.customtkinter_tk import CTk
|
||||||
@ -135,10 +136,24 @@ class CTkRadioButton(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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):
|
def draw(self):
|
||||||
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)
|
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.width, self.height, self.corner_radius, self.border_width)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
@ -134,10 +135,24 @@ class CTkSlider(tkinter.Frame):
|
|||||||
self.grid_columnconfigure(0, weight=1)
|
self.grid_columnconfigure(0, weight=1)
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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
|
@staticmethod
|
||||||
def calc_optimal_height(user_height):
|
def calc_optimal_height(user_height):
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import tkinter
|
import tkinter
|
||||||
|
import tkinter.ttk as ttk
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .customtkinter_tk import CTk
|
from .customtkinter_tk import CTk
|
||||||
@ -134,10 +135,24 @@ class CTkSwitch(tkinter.Frame):
|
|||||||
super().destroy()
|
super().destroy()
|
||||||
|
|
||||||
def detect_color_of_master(self):
|
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
|
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):
|
def draw(self, color_updates=True):
|
||||||
|
|
||||||
|
@ -29,8 +29,9 @@ f4.grid(row=0, column=3, rowspan=1, columnspan=1, sticky="nsew")
|
|||||||
f4.grid_columnconfigure(0, weight=1)
|
f4.grid_columnconfigure(0, weight=1)
|
||||||
|
|
||||||
for i in range(0, 21, 1):
|
for i in range(0, 21, 1):
|
||||||
b = customtkinter.CTkButton(f1, corner_radius=i, height=34, border_width=2, text=f"{i} {i-2}",
|
#b = customtkinter.CTkButton(f1, corner_radius=i, height=34, border_width=2, text=f"{i} {i-2}",
|
||||||
border_color="white", fg_color=None, text_color="white")
|
# border_color="white", fg_color=None, text_color="white")
|
||||||
|
b = tkinter.Button(f1, text=f"{i} {i-2}", width=20)
|
||||||
b.grid(row=i, column=0, pady=5, padx=15, sticky="nsew")
|
b.grid(row=i, column=0, pady=5, padx=15, sticky="nsew")
|
||||||
|
|
||||||
b = customtkinter.CTkButton(f2, corner_radius=i, height=34, border_width=0, text=f"{i}",
|
b = customtkinter.CTkButton(f2, corner_radius=i, height=34, border_width=0, text=f"{i}",
|
||||||
|
@ -41,57 +41,4 @@ button_5.pack(pady=20, padx=20)
|
|||||||
ttk_style = ttk.Style()
|
ttk_style = ttk.Style()
|
||||||
ttk_style.configure(frame_3.winfo_class(), background='red')
|
ttk_style.configure(frame_3.winfo_class(), background='red')
|
||||||
|
|
||||||
|
|
||||||
def iter_layout(layout, tab_amnt=0, elements=[]):
|
|
||||||
"""Recursively prints the layout children."""
|
|
||||||
el_tabs = ' '*tab_amnt
|
|
||||||
val_tabs = ' '*(tab_amnt + 1)
|
|
||||||
|
|
||||||
for element, child in layout:
|
|
||||||
elements.append(element)
|
|
||||||
print(el_tabs+ '\'{}\': {}'.format(element, '{'))
|
|
||||||
for key, value in child.items():
|
|
||||||
if type(value) == str:
|
|
||||||
print(val_tabs + '\'{}\' : \'{}\','.format(key, value))
|
|
||||||
else:
|
|
||||||
print(val_tabs + '\'{}\' : [('.format(key))
|
|
||||||
iter_layout(value, tab_amnt=tab_amnt+3)
|
|
||||||
print(val_tabs + ')]')
|
|
||||||
|
|
||||||
print(el_tabs + '{}{}'.format('} // ', element))
|
|
||||||
|
|
||||||
return elements
|
|
||||||
|
|
||||||
def stylename_elements_options(stylename, widget):
|
|
||||||
"""Function to expose the options of every element associated to a widget stylename."""
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get widget elements
|
|
||||||
style = ttk.Style()
|
|
||||||
layout = style.layout(stylename)
|
|
||||||
config = widget.configure()
|
|
||||||
|
|
||||||
print('{:*^50}\n'.format(f'Style = {stylename}'))
|
|
||||||
|
|
||||||
print('{:*^50}'.format('Config'))
|
|
||||||
for key, value in config.items():
|
|
||||||
print('{:<15}{:^10}{}'.format(key, '=>', value))
|
|
||||||
|
|
||||||
print('\n{:*^50}'.format('Layout'))
|
|
||||||
elements = iter_layout(layout)
|
|
||||||
|
|
||||||
# Get options of widget elements
|
|
||||||
print('\n{:*^50}'.format('element options'))
|
|
||||||
for element in elements:
|
|
||||||
print('{0:30} options: {1}'.format(
|
|
||||||
element, style.element_options(element)))
|
|
||||||
|
|
||||||
except tk.TclError:
|
|
||||||
print('_tkinter.TclError: "{0}" in function'
|
|
||||||
'widget_elements_options({0}) is not a regonised stylename.'
|
|
||||||
.format(stylename))
|
|
||||||
|
|
||||||
|
|
||||||
stylename_elements_options(frame_3.winfo_class(), frame_3)
|
|
||||||
|
|
||||||
root_tk.mainloop()
|
root_tk.mainloop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user