mirror of
https://github.com/TomSchimansky/CustomTkinter.git
synced 2023-08-10 21:13:13 +03:00
added bind method to all widgets, added kwargs managing for CTkLabel
This commit is contained in:
parent
92873373a1
commit
12f0942e73
@ -408,3 +408,7 @@ class CTkButton(CTkBaseClass):
|
|||||||
self.after(100, self._click_animation)
|
self.after(100, self._click_animation)
|
||||||
|
|
||||||
self._command()
|
self._command()
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -363,3 +363,7 @@ class CTkCheckBox(CTkBaseClass):
|
|||||||
|
|
||||||
def get(self) -> Union[int, str]:
|
def get(self) -> Union[int, str]:
|
||||||
return self._onvalue if self._check_state is True else self._offvalue
|
return self._onvalue if self._check_state is True else self._offvalue
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -349,3 +349,7 @@ class CTkComboBox(CTkBaseClass):
|
|||||||
def _clicked(self, event=0):
|
def _clicked(self, event=0):
|
||||||
if self._state is not tkinter.DISABLED and len(self._values) > 0:
|
if self._state is not tkinter.DISABLED and len(self._values) > 0:
|
||||||
self._open_dropdown_menu()
|
self._open_dropdown_menu()
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -89,10 +89,12 @@ class CTkEntry(CTkBaseClass):
|
|||||||
textvariable=self._textvariable,
|
textvariable=self._textvariable,
|
||||||
**pop_from_dict_by_set(kwargs, self._valid_tk_entry_attributes))
|
**pop_from_dict_by_set(kwargs, self._valid_tk_entry_attributes))
|
||||||
if self._corner_radius >= self._minimum_x_padding:
|
if self._corner_radius >= self._minimum_x_padding:
|
||||||
self._entry.grid(column=0, row=0, sticky="nswe", padx=min(self._apply_widget_scaling(self._corner_radius), self._current_height),
|
self._entry.grid(column=0, row=0, sticky="nswe",
|
||||||
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._apply_widget_scaling(self._current_height/2))),
|
||||||
pady=(self._apply_widget_scaling(self._border_width), self._apply_widget_scaling(self._border_width + 1)))
|
pady=(self._apply_widget_scaling(self._border_width), self._apply_widget_scaling(self._border_width + 1)))
|
||||||
else:
|
else:
|
||||||
self._entry.grid(column=0, row=0, sticky="nswe", padx=self._apply_widget_scaling(self._minimum_x_padding),
|
self._entry.grid(column=0, row=0, sticky="nswe",
|
||||||
|
padx=self._apply_widget_scaling(self._minimum_x_padding),
|
||||||
pady=(self._apply_widget_scaling(self._border_width), self._apply_widget_scaling(self._border_width + 1)))
|
pady=(self._apply_widget_scaling(self._border_width), self._apply_widget_scaling(self._border_width + 1)))
|
||||||
|
|
||||||
self._check_kwargs_empty(kwargs, raise_error=True)
|
self._check_kwargs_empty(kwargs, raise_error=True)
|
||||||
@ -186,9 +188,11 @@ class CTkEntry(CTkBaseClass):
|
|||||||
if "corner_radius" in kwargs:
|
if "corner_radius" in kwargs:
|
||||||
self._corner_radius = kwargs.pop("corner_radius")
|
self._corner_radius = kwargs.pop("corner_radius")
|
||||||
if self._corner_radius >= self._minimum_x_padding:
|
if self._corner_radius >= self._minimum_x_padding:
|
||||||
self._entry.grid(column=0, row=0, sticky="we", padx=min(self._apply_widget_scaling(self._corner_radius), self._current_height / 2))
|
self._entry.grid(column=0, row=0, sticky="we",
|
||||||
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._apply_widget_scaling(self._current_height/2))))
|
||||||
else:
|
else:
|
||||||
self._entry.grid(column=0, row=0, sticky="we", padx=self._apply_widget_scaling(self._minimum_x_padding))
|
self._entry.grid(column=0, row=0, sticky="we",
|
||||||
|
padx=self._apply_widget_scaling(self._minimum_x_padding))
|
||||||
require_redraw = True
|
require_redraw = True
|
||||||
|
|
||||||
if "width" in kwargs:
|
if "width" in kwargs:
|
||||||
@ -253,10 +257,11 @@ class CTkEntry(CTkBaseClass):
|
|||||||
elif attribute_name in self._valid_tk_entry_attributes:
|
elif attribute_name in self._valid_tk_entry_attributes:
|
||||||
return self._entry.cget(attribute_name) # cget of tkinter.Entry
|
return self._entry.cget(attribute_name) # cget of tkinter.Entry
|
||||||
else:
|
else:
|
||||||
return super().cget(attribute_name)
|
return super().cget(attribute_name) # cget of CTkBaseClass
|
||||||
|
|
||||||
def bind(self, sequence=None, command=None, add=None):
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
self._entry.bind(sequence, command, add)
|
""" called on the tkinter.Entry """
|
||||||
|
return self._entry.bind(sequence, command, add)
|
||||||
|
|
||||||
def _activate_placeholder(self):
|
def _activate_placeholder(self):
|
||||||
if self._entry.get() == "" and self._placeholder_text is not None and (self._textvariable is None or self._textvariable == ""):
|
if self._entry.get() == "" and self._placeholder_text is not None and (self._textvariable is None or self._textvariable == ""):
|
||||||
|
@ -154,5 +154,10 @@ class CTkFrame(CTkBaseClass):
|
|||||||
return self._fg_color
|
return self._fg_color
|
||||||
elif attribute_name == "border_color":
|
elif attribute_name == "border_color":
|
||||||
return self._border_color
|
return self._border_color
|
||||||
|
|
||||||
else:
|
else:
|
||||||
return super().cget(attribute_name)
|
return super().cget(attribute_name)
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -6,6 +6,8 @@ from ..theme_manager import ThemeManager
|
|||||||
from ..draw_engine import DrawEngine
|
from ..draw_engine import DrawEngine
|
||||||
from .widget_base_class import CTkBaseClass
|
from .widget_base_class import CTkBaseClass
|
||||||
|
|
||||||
|
from .widget_helper_functions import pop_from_dict_by_set
|
||||||
|
|
||||||
|
|
||||||
class CTkLabel(CTkBaseClass):
|
class CTkLabel(CTkBaseClass):
|
||||||
"""
|
"""
|
||||||
@ -14,7 +16,8 @@ class CTkLabel(CTkBaseClass):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# attributes that are passed to and managed by the tkinter entry only:
|
# attributes that are passed to and managed by the tkinter entry only:
|
||||||
_valid_tk_label_attributes = {"compound", "cursor", ""}
|
_valid_tk_label_attributes = {"compound", "cursor", "image", "justify", "padx", "pady",
|
||||||
|
"textvariable", "state", "takefocus", "underline", "wraplength"}
|
||||||
|
|
||||||
def __init__(self, *args,
|
def __init__(self, *args,
|
||||||
width: int = 140,
|
width: int = 140,
|
||||||
@ -65,10 +68,13 @@ class CTkLabel(CTkBaseClass):
|
|||||||
anchor=self._anchor,
|
anchor=self._anchor,
|
||||||
text=self._text,
|
text=self._text,
|
||||||
font=self._apply_font_scaling(self._font),
|
font=self._apply_font_scaling(self._font),
|
||||||
**kwargs)
|
**pop_from_dict_by_set(kwargs, self._valid_tk_label_attributes))
|
||||||
|
|
||||||
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
||||||
self._text_label.grid(row=0, column=0, padx=self._apply_widget_scaling(self._corner_radius),
|
self._text_label.grid(row=0, column=0, sticky=text_label_grid_sticky,
|
||||||
sticky=text_label_grid_sticky)
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._current_height/2)))
|
||||||
|
|
||||||
|
self._check_kwargs_empty(kwargs, raise_error=True)
|
||||||
|
|
||||||
self.bind('<Configure>', self._update_dimensions_event)
|
self.bind('<Configure>', self._update_dimensions_event)
|
||||||
self._draw()
|
self._draw()
|
||||||
@ -78,9 +84,10 @@ class CTkLabel(CTkBaseClass):
|
|||||||
|
|
||||||
self._canvas.configure(width=self._apply_widget_scaling(self._desired_width), height=self._apply_widget_scaling(self._desired_height))
|
self._canvas.configure(width=self._apply_widget_scaling(self._desired_width), height=self._apply_widget_scaling(self._desired_height))
|
||||||
self._text_label.configure(font=self._apply_font_scaling(self._font))
|
self._text_label.configure(font=self._apply_font_scaling(self._font))
|
||||||
|
|
||||||
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
||||||
self._text_label.grid(row=0, column=0, padx=self._apply_widget_scaling(self._corner_radius),
|
self._text_label.grid(row=0, column=0, sticky=text_label_grid_sticky,
|
||||||
sticky=text_label_grid_sticky)
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._current_height/2)))
|
||||||
|
|
||||||
self._draw()
|
self._draw()
|
||||||
|
|
||||||
@ -119,8 +126,8 @@ class CTkLabel(CTkBaseClass):
|
|||||||
if "anchor" in kwargs:
|
if "anchor" in kwargs:
|
||||||
self._anchor = kwargs.pop("anchor")
|
self._anchor = kwargs.pop("anchor")
|
||||||
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
||||||
self._text_label.grid(row=0, column=0, padx=self._apply_widget_scaling(self._corner_radius),
|
self._text_label.grid(row=0, column=0, sticky=text_label_grid_sticky,
|
||||||
sticky=text_label_grid_sticky)
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._current_height/2)))
|
||||||
|
|
||||||
if "text" in kwargs:
|
if "text" in kwargs:
|
||||||
self._text = kwargs.pop("text")
|
self._text = kwargs.pop("text")
|
||||||
@ -144,12 +151,15 @@ class CTkLabel(CTkBaseClass):
|
|||||||
if "height" in kwargs:
|
if "height" in kwargs:
|
||||||
self._set_dimensions(height=kwargs.pop("height"))
|
self._set_dimensions(height=kwargs.pop("height"))
|
||||||
|
|
||||||
if "_bg_color" in kwargs:
|
if "corner_radius" in kwargs:
|
||||||
super().configure(bg_color=kwargs.pop("_bg_color"), require_redraw=require_redraw)
|
self._corner_radius = kwargs.pop("corner_radius")
|
||||||
else:
|
text_label_grid_sticky = self._anchor if self._anchor != "center" else ""
|
||||||
super().configure(require_redraw=require_redraw)
|
self._text_label.grid(row=0, column=0, sticky=text_label_grid_sticky,
|
||||||
|
padx=min(self._apply_widget_scaling(self._corner_radius), round(self._current_height/2)))
|
||||||
|
require_redraw = True
|
||||||
|
|
||||||
self._text_label.configure(**kwargs) # pass remaining kwargs to label
|
self._text_label.configure(**pop_from_dict_by_set(kwargs, self._valid_tk_label_attributes)) # configure tkinter.Label
|
||||||
|
super().configure(require_redraw=require_redraw, **kwargs) # configure CTkBaseClass
|
||||||
|
|
||||||
def cget(self, attribute_name: str) -> any:
|
def cget(self, attribute_name: str) -> any:
|
||||||
if attribute_name == "corner_radius":
|
if attribute_name == "corner_radius":
|
||||||
@ -166,5 +176,12 @@ class CTkLabel(CTkBaseClass):
|
|||||||
return self._font
|
return self._font
|
||||||
elif attribute_name == "anchor":
|
elif attribute_name == "anchor":
|
||||||
return self._anchor
|
return self._anchor
|
||||||
|
|
||||||
|
elif attribute_name in self._valid_tk_label_attributes:
|
||||||
|
return self._text_label.cget(attribute_name) # cget of tkinter.Label
|
||||||
else:
|
else:
|
||||||
return super().cget(attribute_name)
|
return super().cget(attribute_name) # cget of CTkBaseClass
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Label """
|
||||||
|
return self._text_label.bind(sequence, command, add)
|
||||||
|
@ -356,3 +356,7 @@ class CTkOptionMenu(CTkBaseClass):
|
|||||||
def _clicked(self, event=0):
|
def _clicked(self, event=0):
|
||||||
if self._state is not tkinter.DISABLED and len(self._values) > 0:
|
if self._state is not tkinter.DISABLED and len(self._values) > 0:
|
||||||
self._open_dropdown_menu()
|
self._open_dropdown_menu()
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -281,3 +281,7 @@ class CTkProgressBar(CTkBaseClass):
|
|||||||
else:
|
else:
|
||||||
self._indeterminate_value += self._indeterminate_speed
|
self._indeterminate_value += self._indeterminate_speed
|
||||||
self._draw()
|
self._draw()
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -324,3 +324,7 @@ class CTkRadioButton(CTkBaseClass):
|
|||||||
self._variable_callback_blocked = True
|
self._variable_callback_blocked = True
|
||||||
self._variable.set("")
|
self._variable.set("")
|
||||||
self._variable_callback_blocked = False
|
self._variable_callback_blocked = False
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -248,3 +248,7 @@ class CTkScrollbar(CTkBaseClass):
|
|||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
return self._start_value, self._end_value
|
return self._start_value, self._end_value
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -364,3 +364,7 @@ class CTkSlider(CTkBaseClass):
|
|||||||
def _variable_callback(self, var_name, index, mode):
|
def _variable_callback(self, var_name, index, mode):
|
||||||
if not self._variable_callback_blocked:
|
if not self._variable_callback_blocked:
|
||||||
self.set(self._variable.get(), from_variable_callback=True)
|
self.set(self._variable.get(), from_variable_callback=True)
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -373,3 +373,7 @@ class CTkSwitch(CTkBaseClass):
|
|||||||
self.select(from_variable_callback=True)
|
self.select(from_variable_callback=True)
|
||||||
elif self._variable.get() == self._offvalue:
|
elif self._variable.get() == self._offvalue:
|
||||||
self.deselect(from_variable_callback=True)
|
self.deselect(from_variable_callback=True)
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Canvas """
|
||||||
|
return self._canvas.bind(sequence, command, add)
|
||||||
|
@ -178,6 +178,10 @@ class CTkTextbox(CTkBaseClass):
|
|||||||
else:
|
else:
|
||||||
return super().cget(attribute_name)
|
return super().cget(attribute_name)
|
||||||
|
|
||||||
|
def bind(self, sequence=None, command=None, add=None):
|
||||||
|
""" called on the tkinter.Text """
|
||||||
|
return self._textbox.bind(sequence, command, add)
|
||||||
|
|
||||||
def yview(self, *args):
|
def yview(self, *args):
|
||||||
return self._textbox.yview(*args)
|
return self._textbox.yview(*args)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user