""" Behaviors/Scale =============== .. versionadded:: 1.1.0 Base class for controlling the scale of the widget. .. note:: See `kivy.graphics.Rotate `_ for more information. Kivy ---- .. code-block:: python from kivy.animation import Animation from kivy.lang import Builder from kivy.properties import NumericProperty from kivy.uix.button import Button from kivy.app import App KV = ''' Screen: ScaleButton: size_hint: .5, .5 pos_hint: {"center_x": .5, "center_y": .5} on_release: app.change_scale(self) canvas.before: PushMatrix Scale: x: self.scale_value_x y: self.scale_value_y z: self.scale_value_x origin: self.center canvas.after: PopMatrix ''' class ScaleButton(Button): scale_value_x = NumericProperty(1) scale_value_y = NumericProperty(1) scale_value_z = NumericProperty(1) class Test(App): def build(self): return Builder.load_string(KV) def change_scale(self, instance_button: Button) -> None: Animation( scale_value_x=0.5, scale_value_y=0.5, scale_value_z=0.5, d=0.3, ).start(instance_button) Test().run() KivyMD ------ .. code-block:: python from kivy.animation import Animation from kivy.lang import Builder from kivy.uix.behaviors import ButtonBehavior from kivymd.app import MDApp from kivymd.uix.behaviors import ScaleBehavior from kivymd.uix.boxlayout import MDBoxLayout KV = ''' MDScreen: ScaleBox: size_hint: .5, .5 pos_hint: {"center_x": .5, "center_y": .5} on_release: app.change_scale(self) md_bg_color: "red" ''' class ScaleBox(ButtonBehavior, ScaleBehavior, MDBoxLayout): pass class Test(MDApp): def build(self): return Builder.load_string(KV) def change_scale(self, instance_button: ScaleBox) -> None: Animation( scale_value_x=0.5, scale_value_y=0.5, scale_value_z=0.5, d=0.3, ).start(instance_button) Test().run() .. warning:: Do not use `ScaleBehavior` class with classes that inherited` from `CommonElevationBehavior` class. `CommonElevationBehavior` classes by default contains attributes for scale widget. """ __all__ = ("ScaleBehavior",) from kivy.lang import Builder from kivy.properties import ListProperty, NumericProperty Builder.load_string( """ canvas.before: PushMatrix Scale: x: self.scale_value_x y: self.scale_value_y z: self.scale_value_z origin: self.center \ if not self.scale_value_center else \ self.scale_value_center canvas.after: PopMatrix """ ) class ScaleBehavior: """Base class for controlling the scale of the widget.""" scale_value_x = NumericProperty(1) """ X-axis value. :attr:`scale_value_x` is an :class:`~kivy.properties.NumericProperty` and defaults to `1`. """ scale_value_y = NumericProperty(1) """ Y-axis value. :attr:`scale_value_y` is an :class:`~kivy.properties.NumericProperty` and defaults to `1`. """ scale_value_z = NumericProperty(1) """ Z-axis value. :attr:`scale_value_z` is an :class:`~kivy.properties.NumericProperty` and defaults to `1`. """ scale_value_center = ListProperty() """ Origin of the scale. .. versionadded:: 1.2.0 The format of the origin can be either (x, y) or (x, y, z). :attr:`scale_value_center` is an :class:`~kivy.properties.NumericProperty` and defaults to `[]`. """