mirror of
https://github.com/TomSchimansky/CustomTkinter.git
synced 2023-08-10 21:13:13 +03:00
fixed complex example
This commit is contained in:
parent
e0eebac62c
commit
9ee5e3b7f2
@ -66,8 +66,8 @@ class CTkButton(CTkBaseClass):
|
||||
|
||||
self.canvas = CTkCanvas(master=self,
|
||||
highlightthickness=0,
|
||||
width=self.apply_widget_scaling(self.desired_width),
|
||||
height=self.apply_widget_scaling(self.desired_height))
|
||||
width=self.round_size(self.apply_widget_scaling(self.desired_width)),
|
||||
height=self.round_size(self.apply_widget_scaling(self.desired_height)))
|
||||
self.canvas.grid(row=0, column=0, rowspan=2, columnspan=2, sticky="nsew")
|
||||
self.draw_engine = CTkDrawEngine(self.canvas, CTkSettings.preferred_drawing_method)
|
||||
|
||||
@ -98,10 +98,12 @@ class CTkButton(CTkBaseClass):
|
||||
self.image_label.destroy()
|
||||
self.image_label = None
|
||||
|
||||
self.canvas.configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
self.canvas.configure(width=self.round_size(self.apply_widget_scaling(self.desired_width)),
|
||||
height=self.round_size(self.apply_widget_scaling(self.desired_height)))
|
||||
self.draw()
|
||||
|
||||
def draw(self, no_color_updates=False):
|
||||
print("current_height", self.current_height, "desired", self.desired_height)
|
||||
requires_recoloring = self.draw_engine.draw_rounded_rect_with_border(self.apply_widget_scaling(self.current_width),
|
||||
self.apply_widget_scaling(self.current_height),
|
||||
self.apply_widget_scaling(self.corner_radius),
|
||||
@ -219,6 +221,8 @@ class CTkButton(CTkBaseClass):
|
||||
self.text_label.grid(row=0, column=0, sticky="s", columnspan=2, rowspan=1,
|
||||
padx=max(self.apply_widget_scaling(self.corner_radius), self.apply_widget_scaling(self.border_width)), pady=(self.apply_widget_scaling(self.border_width), 2))
|
||||
|
||||
# self.canvas.configure(bg="red") # test
|
||||
|
||||
def configure(self, *args, **kwargs):
|
||||
require_redraw = False # some attribute changes require a call of self.draw() at the end
|
||||
|
||||
|
@ -2,6 +2,7 @@ import tkinter
|
||||
import tkinter.ttk as ttk
|
||||
import copy
|
||||
import re
|
||||
import math
|
||||
from typing import Callable, Union, TypedDict
|
||||
|
||||
from ..windows.ctk_tk import CTk
|
||||
@ -27,7 +28,8 @@ class CTkBaseClass(tkinter.Frame):
|
||||
self.widget_scaling = ScalingTracker.get_widget_scaling(self)
|
||||
self.spacing_scaling = ScalingTracker.get_spacing_scaling(self)
|
||||
|
||||
super().configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
super().configure(width=self.round_size(self.apply_widget_scaling(self.desired_width)),
|
||||
height=self.round_size(self.apply_widget_scaling(self.desired_height)))
|
||||
|
||||
# save latest geometry function and kwargs
|
||||
class GeometryCallDict(TypedDict):
|
||||
@ -123,9 +125,9 @@ class CTkBaseClass(tkinter.Frame):
|
||||
|
||||
def update_dimensions_event(self, event):
|
||||
# only redraw if dimensions changed (for performance)
|
||||
if self.current_width != round(event.width / self.widget_scaling) or self.current_height != round(event.height / self.widget_scaling):
|
||||
self.current_width = round(event.width / self.widget_scaling) # adjust current size according to new size given by event
|
||||
self.current_height = round(event.height / self.widget_scaling) # current_width and current_height are independent of the scale
|
||||
if round(self.current_width) != round(event.width / self.widget_scaling) or round(self.current_height) != round(event.height / self.widget_scaling):
|
||||
self.current_width = (event.width / self.widget_scaling) # adjust current size according to new size given by event
|
||||
self.current_height = (event.height / self.widget_scaling) # current_width and current_height are independent of the scale
|
||||
|
||||
self.draw(no_color_updates=True) # faster drawing without color changes
|
||||
|
||||
@ -165,7 +167,8 @@ class CTkBaseClass(tkinter.Frame):
|
||||
self.widget_scaling = new_widget_scaling
|
||||
self.spacing_scaling = new_spacing_scaling
|
||||
|
||||
super().configure(width=self.apply_widget_scaling(self.desired_width), height=self.apply_widget_scaling(self.desired_height))
|
||||
super().configure(width=self.round_size(self.apply_widget_scaling(self.desired_width)),
|
||||
height=self.round_size(self.apply_widget_scaling(self.desired_height)))
|
||||
|
||||
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"]))
|
||||
@ -204,6 +207,13 @@ class CTkBaseClass(tkinter.Frame):
|
||||
else:
|
||||
return font
|
||||
|
||||
@staticmethod
|
||||
def round_size(size: Union[int, float, str]):
|
||||
if isinstance(size, (int, float)):
|
||||
return math.floor(size / 2) * 2
|
||||
else:
|
||||
return size
|
||||
|
||||
def draw(self, no_color_updates=False):
|
||||
""" abstract of draw method to be overridden """
|
||||
pass
|
||||
|
@ -3,7 +3,6 @@ import tkinter.messagebox
|
||||
import customtkinter
|
||||
import sys
|
||||
|
||||
customtkinter.ScalingTracker.set_user_scaling(0.5)
|
||||
customtkinter.set_appearance_mode("System") # Modes: "System" (standard), "Dark", "Light"
|
||||
customtkinter.set_default_color_theme("blue") # Themes: "blue" (standard), "green", "dark-blue"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user