#python-3.x #kivy #trigonometry #kivy-language #vertex
#python-3.x #kivy #тригонометрия #kivy-язык #вершина
Вопрос:
Я пытаюсь нарисовать тень для a ModalView
, используя Canvas
Line
инструкции по вершинам. Т.е. ModalView
Нижняя и левая стороны должны иметь небольшое теневое наложение при открытии. Я пытался вызвать ModalView
свойство overlay_color
без эффекта, а Canvas
Line
инструкции по вершинам не создают нужного эффекта. Но, похоже, я не могу нарисовать только нижнюю и левую границу, которая дает эффект тени.
<PopScrollModal>
on_open: app.root._is_modal_open = True
on_dismiss: app.root._is_modal_open = False
id: popscroll
auto_dismiss: True
orientation: 'vertical'
size_hint: (0.94, 0.41)
border: [50, 50, 16, 16]
overlay_color: [0.1, 0.1, 0.1, 0.4]
pos_hint: {'top': 0.72}
background_normal: ''
background_color: (1, 1, 1, 0)
background: 'white.png'
canvas:
Color:
rgba: app.theme_cls.bg_dark
RoundedRectangle:
size: self.size
pos: self.pos
radius: [7,]
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
rounded_rectangle: (self.x, self.y, self.width, self.height, 7)
RecycleView:
id: view_popscroll
viewclass: 'PopScrollBut'
pos_hint: {'top': 1}
size_hint: [1, 0.99]
do_scroll_y: True
RecycleGridLayout:
cols: 1
spacing: 1
default_size: None, 70
default_size_hint: 1, None
size_hint: 1, None
size: self.minimum_size
Эта линейная инструкция рисует снизу, но не придерживается радиуса холста:
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
close: False
points: self.pos[0], self.pos[1], self.pos[0] self.size[0], self.pos[1]]
Line
Инструкция рисует только линию вокруг ModalView
.
Может кто-нибудь помочь понять, как установить Points
, чтобы они отображались только слева и снизу, или установить overlay_color
таким же образом?
Ответ №1:
Вы можете сделать это с помощью BorderImage
. Это плохо документировано, и трудно понять, как оно на самом деле предназначено для работы. Но вот пример, который в основном делает то, что вы хотите:
class MyPop(Popup):
pass
kv = '''
<MyPop>:
canvas.before:
BorderImage:
source: 'shadow32.png'
border: 30, 0, 0, 30
pos: self.x - 30, self.y - 30
size: self.width 60, self.height 60
'''
И вот shadow32.png
то, что используется выше:
Комментарии:
1. Невероятно! Здесь я полировал свои книги по тригонометрии, чтобы понять
Points
свойство, и еще раз @John Anderson вы делаете усложнение таким простым. Спасибо… снова!