рдкреНрдпрд╛рд░реЗ, рдкреНрдпрд╛рд░реЗ рдкреНрд░реЗрдорд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдореЗрдВ рдЕрдЬрдЧрд░!рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдбреНрд╕ рдореЗрдВ 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()
рдЦреИрд░, рдЖрдЦрд┐рд░рдХрд╛рд░, рдореИрдВ рдПрдХ рд╡реАрдбрд┐рдпреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ, рд╕реНрдкрдВрджрди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ - рдХрд┐рд╡реА рдФрд░ рдХрд┐рд╡реАрдПрдордбреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдЫреЛрдбрд╝рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВред