mirror of
https://github.com/TomSchimansky/CustomTkinter.git
synced 2023-08-10 21:13:13 +03:00
added configurable dimensions to some widgets
This commit is contained in:
parent
25297c2598
commit
4389c3e86b
@ -99,7 +99,14 @@ class CTkButton(CTkBaseClass):
|
||||
self.image_label = None
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height)),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def draw(self, no_color_updates=False):
|
||||
@ -290,6 +297,14 @@ class CTkButton(CTkBaseClass):
|
||||
self.text_label.configure(textvariable=self.textvariable)
|
||||
del kwargs["textvariable"]
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
super().configure(*args, **kwargs)
|
||||
|
||||
if require_redraw:
|
||||
|
@ -81,6 +81,13 @@ class CTkEntry(CTkBaseClass):
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_placeholder(self, event=None):
|
||||
if self.placeholder_text is not None:
|
||||
if not self.placeholder_text_active and self.entry.get() == "":
|
||||
@ -181,6 +188,14 @@ class CTkEntry(CTkBaseClass):
|
||||
del kwargs["corner_radius"]
|
||||
require_redraw = True
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
if "placeholder_text" in kwargs:
|
||||
pass
|
||||
|
||||
|
@ -1,8 +1,5 @@
|
||||
import tkinter
|
||||
|
||||
from .ctk_canvas import CTkCanvas
|
||||
from ..theme_manager import ThemeManager
|
||||
from ..settings import Settings
|
||||
from ..draw_engine import DrawEngine
|
||||
from .widget_base_class import CTkBaseClass
|
||||
|
||||
@ -68,6 +65,13 @@ class CTkFrame(CTkBaseClass):
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def draw(self, no_color_updates=False):
|
||||
|
||||
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.apply_widget_scaling(self.current_width),
|
||||
@ -130,6 +134,14 @@ class CTkFrame(CTkBaseClass):
|
||||
require_redraw = True
|
||||
del kwargs["border_width"]
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
super().configure(*args, **kwargs)
|
||||
|
||||
if require_redraw:
|
||||
|
@ -69,6 +69,13 @@ class CTkLabel(CTkBaseClass):
|
||||
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def draw(self, no_color_updates=False):
|
||||
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.apply_widget_scaling(self.current_width),
|
||||
self.apply_widget_scaling(self.current_height),
|
||||
@ -118,6 +125,14 @@ class CTkLabel(CTkBaseClass):
|
||||
require_redraw = True
|
||||
del kwargs["text_color"]
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
self.text_label.configure(*args, **kwargs)
|
||||
|
||||
if require_redraw:
|
||||
|
@ -81,6 +81,13 @@ class CTkProgressBar(CTkBaseClass):
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def destroy(self):
|
||||
if self.variable is not None:
|
||||
self.variable.trace_remove("write", self.variable_callback_name)
|
||||
@ -159,6 +166,14 @@ class CTkProgressBar(CTkBaseClass):
|
||||
|
||||
del kwargs["variable"]
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
super().configure(*args, **kwargs)
|
||||
|
||||
if require_redraw is True:
|
||||
|
@ -109,6 +109,13 @@ class CTkSlider(CTkBaseClass):
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
super().set_dimensions(width, height)
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
self.draw()
|
||||
|
||||
def destroy(self):
|
||||
# remove variable_callback from variable callbacks if variable exists
|
||||
if self.variable is not None:
|
||||
@ -310,6 +317,14 @@ class CTkSlider(CTkBaseClass):
|
||||
|
||||
del kwargs["variable"]
|
||||
|
||||
if "width" in kwargs:
|
||||
self.set_dimensions(width=kwargs["width"])
|
||||
del kwargs["width"]
|
||||
|
||||
if "height" in kwargs:
|
||||
self.set_dimensions(height=kwargs["height"])
|
||||
del kwargs["height"]
|
||||
|
||||
super().configure(*args, **kwargs)
|
||||
|
||||
if require_redraw:
|
||||
|
@ -185,6 +185,15 @@ class CTkBaseClass(tkinter.Frame):
|
||||
if self.last_geometry_manager_call is not None:
|
||||
self.last_geometry_manager_call["function"](**self.apply_argument_scaling(self.last_geometry_manager_call["kwargs"]))
|
||||
|
||||
def set_dimensions(self, width=None, height=None):
|
||||
if width is not None:
|
||||
self.desired_width = width
|
||||
if height is not None:
|
||||
self.desired_height = height
|
||||
|
||||
super().configure(width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
|
||||
def apply_widget_scaling(self, value):
|
||||
if isinstance(value, (int, float)):
|
||||
return value * self.widget_scaling
|
||||
|
36
test/manual_integration_tests/test_configure_dimensions.py
Normal file
36
test/manual_integration_tests/test_configure_dimensions.py
Normal file
@ -0,0 +1,36 @@
|
||||
import customtkinter
|
||||
import random
|
||||
|
||||
|
||||
app = customtkinter.CTk()
|
||||
app.geometry("400x400")
|
||||
|
||||
|
||||
def button_callback():
|
||||
button_1.configure(width=random.randint(30, 200), height=random.randint(30, 60))
|
||||
frame_1.configure(width=random.randint(30, 200), height=random.randint(30, 200))
|
||||
label_1.configure(width=random.randint(30, 200), height=random.randint(30, 40))
|
||||
entry_1.configure(width=random.randint(30, 200), height=random.randint(30, 40))
|
||||
progressbar_1.configure(width=random.randint(30, 200), height=random.randint(10, 16))
|
||||
slider_1.configure(width=random.randint(30, 200), height=random.randint(14, 20))
|
||||
|
||||
|
||||
button_1 = customtkinter.CTkButton(app, text="button_1", command=button_callback)
|
||||
button_1.pack(pady=10)
|
||||
|
||||
frame_1 = customtkinter.CTkFrame(app)
|
||||
frame_1.pack(pady=10)
|
||||
|
||||
label_1 = customtkinter.CTkLabel(app, fg_color="green")
|
||||
label_1.pack(pady=10)
|
||||
|
||||
entry_1 = customtkinter.CTkEntry(app, placeholder_text="placeholder")
|
||||
entry_1.pack(pady=10)
|
||||
|
||||
progressbar_1 = customtkinter.CTkProgressBar(app)
|
||||
progressbar_1.pack(pady=10)
|
||||
|
||||
slider_1 = customtkinter.CTkSlider(app)
|
||||
slider_1.pack(pady=10)
|
||||
|
||||
app.mainloop()
|
Loading…
Reference in New Issue
Block a user