рд╕рд╛рдордЧреНрд░реА рдкрд╛рдпрдердиред рдУрдкрди рдХрд╛рд░реНрдб рдкреНрд░рднрд╛рд╡ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдб


рдкреНрдпрд╛рд░реЗ, рдкреНрдпрд╛рд░реЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдореЗрдВ рдЕрдЬрдЧрд░!

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдбреНрд╕ рдореЗрдВ OpenGL рдЗрдлрд╝реЗрдХреНрдЯ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХрд┐рд╡реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдордЯреАрд░рд┐рдпрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА, рдХрд┐рд╡реАрдПрдордбреАрдПрдо рдЬреИрд╕реЗ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!

KivyMD рдХреЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдирдХ рдШрдЯрдХ MDCard рд╣реИ - рд╡рд┐рднрд┐рдиреНрди рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдб ( рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд▓реНрдкрдирд╛, рдХрд╛рд░реНрдб ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ ред рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ MDCard рдХреЗ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╕рд╛рдорд╛рдиреНрдп BoxLayout рд╣реИ - рдПрдХ рдХрдВрдЯреЗрдирд░ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдЕрдиреНрдп рд╡рд┐рдЧреЗрдЯреНрд╕ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА, рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░рддреЗ рд╣реИрдВред MDCard рдХреЗрд╡рд▓ рд░рд┐рдкреНрдкрд▓_рдмреЗрд╣рд╡рд┐рдпрд░ , рдЯрдЪ_рдмреЗрд╣рд╡рд┐рдпрд░ рдФрд░ рдХрд╛рд╕реНрдЯ рд╢реИрдбреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдПрдХ рдЦрд╛рд▓реА рдХрд╛рд░реНрдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

from kivy.lang import Builder

from kivymd.app import MDApp

KV = '''
Screen:  #  

    MDCard:  # 
        #    
        size_hint: .6, .5
        pos_hint: {"center_x": .5, "center_y": .5}
'''


class TestCard(MDApp):
    def build(self):
        return Builder.load_string(KV)

TestCard().run()

рдкрд░рд┐рдгрд╛рдо:


рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдлреЛрдХрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмреНрд▓рд░ рдЗрдлреЗрдХреНрдЯ рд╡рд╛рд▓рд╛ рдПрдХ рд╕реБрдВрджрд░ рдХрд╛рд░реНрдб рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЬреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реНрд▓рдЯрд░ UI рдбрд┐рдЬрд╝рд╛рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ :


рдЦреБрдж рд╣реА рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рднрд╡рд┐рд╖реНрдп рдХреЗ рдирдХреНрд╢реЗ рдХрд╛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ:

class RestaurantCard(MDCard):
    source = StringProperty()  #     
    shadow = StringProperty()  #    -
    text = StringProperty()  #  

рдХрд╛рд░реНрдб рдХреА рдореБрдЦреНрдп рдЫрд╡рд┐:


рдЫрд╛рдпрд╛ рдЪрд┐рддреНрд░:


рдЕрдм рд╣рдо рдЙрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдирдЪрд┐рддреНрд░ рднрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреЗ рдЧреБрдг рд╣рдордиреЗ рд╡рд┐рд╢реЗрд╖ рдХреЗрд╡реА-рднрд╛рд╖рд╛ рдбреАрдПрд╕рдПрд▓ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рд╣реИрдВ , рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ:

<RestaurantCard>
    elevation: 12

    RelativeLayout:

        # ,       .
        FitImage:  #   
            source: root.source

        FitImage:  # -
            source: root.shadow
            size_hint_y: None
            height: "120dp"

        MDLabel:  #  
            text: root.text
            markup: True
            size_hint_y: None
            height: self.texture_size[1]
            x: "10dp"
            y: "10dp"
            theme_text_color: "Custom"
            text_color: 1, 1, 1, 1

рд╣рдо рдирдХреНрд╢реЗ рдкрд░ RelativeLayout рд╡рд┐рдЬреЗрдЯ рдбрд╛рд▓рддреЗ рд╣реИрдВ , рдЬреЛ рд╣рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдХреЗ рдКрдкрд░ рдПрдХ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдореБрдЦреНрдп рдЫрд╡рд┐ рд░рдЦреА, рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЫрд╛рдпрд╛ рдФрд░ рдкрд╛рда рд░рдЦрд╛ред рдЕрдм рдЕрдЧрд░ рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

from kivy.lang import Builder
from kivy.properties import StringProperty

from kivymd.app import MDApp
from kivymd.uix.card import MDCard

KV = """
<RestaurantCard>
    elevation: 12

    RelativeLayout:

        FitImage:
            source: root.source

        FitImage:
            source: root.shadow
            size_hint_y: None
            height: "120dp"

        MDLabel:
            text: root.text
            markup: True
            size_hint_y: None
            height: self.texture_size[1]
            x: "10dp"
            y: "10dp"
            theme_text_color: "Custom"
            text_color: 1, 1, 1, 1


Screen:

    RestaurantCard:
        text: "[size=23][b]Restaurant[/b][/size]\\nTuborg Havnepark 15, Hellerup 2900 Denmark"
        shadow: "shadow-black.png"
        source: "restourant.jpg"
        pos_hint: {"center_x": .5, "center_y": .5}
        size_hint: .7, .5
"""


class RestaurantCard(MDCard):
    source = StringProperty()
    text = StringProperty()
    shadow = StringProperty()


class BlurCard(MDApp):
    def build(self):
        return Builder.load_string(KV)

BlurCard().run()

... рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:


рдФрд░ рдкрд░рд┐рдгрд╛рдо, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд╛рд░реНрдб рдкрд░ рдХреЛрдИ рдзрдмреНрдмрд╛ рдкреНрд░рднрд╛рд╡ рдпрд╛ рдЧреЛрд▓ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред рдЪрд▓реЛ рдзреБрдВрдзрд▓реЗ рдкреНрд░рднрд╛рд╡ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╡реА рдХреЗ рдкрд╛рд╕ рдПрдХ рдорд╛рдирдХ EffectWidget рд╡рд┐рдЬреЗрдЯ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдмрдЪреНрдЪреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╕реНрдЯрдо OpenGL shaders рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Fbo рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдореБрдЦреНрдп рдЫрд╡рд┐ рдФрд░ рдХрд╛рд░реНрдб рдкрд░ рдЫрд╛рдпрд╛ рдЫрд╡рд┐ рдкрд░ рдзрдмреНрдмрд╛ рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдирдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ EffectWidget рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

#:import effect kivy.uix.effectwidget.EffectWidget
#:import HorizontalBlurEffect kivy.uix.effectwidget.HorizontalBlurEffect

<RestaurantCard>

    ...

    RelativeLayout:
        
        #   ,      .
        EffectWidget:
            #  .
            effects: (HorizontalBlurEffect(size=root.blur),)

            FitImage:
                source: root.source

            FitImage:
                source: root.shadow
                size_hint_y: None
                height: "120dp"

    ...    

рдзреБрдВрдзрд▓рд╛ рдкреНрд░рднрд╛рд╡ рдХреА рдбрд┐рдЧреНрд░реА рдХреЗ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВ:

class RestaurantCard(MDCard):
    ...
    blur = NumericProperty(8)

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:


рдЬрдм рдЖрдк рдУрд╡рд░ рд╣реЛ (рдпрджрд┐ рдпрд╣ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рд╣реИ) рдпрд╛ рдЯреИрдк рдХрд░реЗрдВ (рдпрджрд┐ рдпрд╣ рдореЛрдмрд╛рдЗрд▓ рд╣реИ) рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП on_focus рдШрдЯрдирд╛ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд░реЗрд╕реНрддрд░рд╛рдВрдХрд╛рд░реНрдб рдирд┐рдпрдо рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрдврд╝рдиреЗ рдФрд░ рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рдШрдЯрдирд╛ рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

#:import Animation kivy.animation.Animation

<RestaurantCard>
    focus_behavior: True  #    on_focus
    # ,       .
    #   Animation,    .
    on_enter: Animation(blur=0, d=0.3).start(self)
    on_leave: Animation(blur=8, d=0.3).start(self)

рдкрд╣рд▓реЗ рд╕реЗ рдмреЗрд╣рддрд░:


рдХрд╛рд░реНрдб рдХреЗ рдХреЛрдиреЛрдВ рдХреЛ рдЯреНрд░рд┐рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ EffectWidget рд╡рд┐рдЬреЗрдЯ рдкрд░ рдПрдХ рд╕реНрдЯреИрдВрд╕рд┐рд▓ (рд╕реНрдЯреИрдВрд╕рд┐рд▓) рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:

#:import Stencil kivymd.uix.graphics.Stencil


#   ,   EffectWidget  Stencil.
<Effect@EffectWidget+Stencil>
    radius: [20,]


<RestaurantCard>
    ...

    RelativeLayout:

        Effect:
            ...

рдФрд░ рдЕрдм рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдордиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА:


рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдХреЛрдб
from kivy.lang import Builder
from kivy.properties import StringProperty, NumericProperty

from kivymd.app import MDApp
from kivymd.uix.card import MDCard

KV = """
#:import Stencil kivymd.uix.graphics.Stencil
#:import Animation kivy.animation.Animation
#:import effect kivy.uix.effectwidget.EffectWidget
#:import HorizontalBlurEffect kivy.uix.effectwidget.HorizontalBlurEffect


<Effect@EffectWidget+Stencil>
    radius: [20,]


<RestaurantCard>
    md_bg_color: 0, 0, 0, 0
    elevation: 12
    focus_behavior: True
    on_enter: Animation(blur=0, d=0.3).start(self)
    on_leave: Animation(blur=8, d=0.3).start(self)
    radius: [20,]

    RelativeLayout:

        Effect:
            effects: (HorizontalBlurEffect(size=root.blur),)

            FitImage:
                source: root.source

            FitImage:
                source: root.shadow
                size_hint_y: None
                height: "120dp"

        MDLabel:
            text: root.text
            markup: True
            size_hint_y: None
            height: self.texture_size[1]
            x: "10dp"
            y: "10dp"
            theme_text_color: "Custom"
            text_color: 1, 1, 1, 1


FloatLayout:

    RestaurantCard:
        text: "[size=23][b]Restaurant[/b][/size]\\nTuborg Havnepark 15, Hellerup 2900 Denmark"
        shadow: "shadow-black.png"
        source: "restourant.jpg"
        pos_hint: {"center_x": .5, "center_y": .5}
        size_hint: .7, .5
"""


class RestaurantCard(MDCard):
    source = StringProperty()
    text = StringProperty()
    shadow = StringProperty()
    blur = NumericProperty(8)


class BlurCard(MDApp):
    def build(self):
        return Builder.load_string(KV)


BlurCard().run()


рдЦреИрд░, рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВ рдПрдХ рд╡реАрдбрд┐рдпреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ, рд╕реНрдкрдВрджрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ - рдХрд┐рд╡реА рдФрд░ рдХрд┐рд╡реАрдПрдордбреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВред


All Articles