Решение
Установите opacity
первого слоя / макета на 0,5
Класс виджетов »Непрозрачность
Непрозрачность
Непрозрачность виджета и всех его дочерних элементов.
Атрибут opacity контролирует прозрачность виджета и его
дети. Будьте осторожны, это кумулятивный атрибут: значение
умножается на текущую глобальную непрозрачность, и результат применяется к
текущий цвет контекста.
...
Непрозрачность
равна NumericProperty и по умолчанию равна 1,0.
Kivy Graphics Line »точки
баллов: список
Список точек в формате (x1, y1, x2, y2…)
Свойство для получения / настройки точек линии
Внимание
Это всегда реконструирует всю графику из новых точек
список. Это может быть очень дорого CPU.
Kivy Graphics Line »круг
круг
Используйте это свойство, чтобы построить круг, не вычисляя точки.
Вы можете только установить это свойство, но не получить его.
Аргумент должен быть кортежем (center_x, center_y, radius,
angle_start, angle_end, сегменты):
- center_x и center_y представляют центр круга
- радиус представляет радиус круга
- (необязательно) angle_start и angle_end в градусах. Значением по умолчанию является 0 и 360.
- (опционально) сегменты - это точность эллипса. Значение по умолчанию рассчитывается из диапазона между углами.
Обратите внимание, что вам решать, закрывать круг или нет.
Пример
main.py - без кв
from kivy.base import runTouchApp
from kivy.core.window import Window
from kivy.uix.screenmanager import Screen
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Color, Line
from kivy.metrics import dp
Window.clearcolor = (1, 1, 1, 1)
class Overlay2Layouts(Screen):
def __init__(self, **kwargs):
super(Overlay2Layouts, self).__init__(**kwargs)
self.size = Window.size
layout1 = BoxLayout(opacity=0.5)
with layout1.canvas:
Color(1, 0, 0, 1) # red colour
Line(points=[self.center_x, self.height / 4, self.center_x, self.height * 3/4], width=dp(2))
Line(points=[self.width * 3/ 4, self.center_y, self.width /4, self.center_y], width=dp(2))
layout2 = BoxLayout()
with layout2.canvas:
Color(0, 0, 0, 1) # black colour
Line(circle=[self.center_x, self.center_y, 190], width=dp(2))
self.add_widget(layout1)
self.add_widget(layout2)
if __name__ == "__main__":
runTouchApp(Overlay2Layouts())
main.py - с использованием kv и Python
from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.core.window import Window
Window.clearcolor = (1, 1, 1, 1)
runTouchApp(Builder.load_string('''
#:kivy 1.11.0
Screen:
BoxLayout:
opacity: 0.5
canvas.before:
Color:
rgba: 1, 0, 0, 1
Line:
width: dp(2.)
points: [self.center_x, self.height / 4, self.center_x, self.height * 3/4]
Line:
width: dp(2.)
points: [root.width * 3/ 4, self.center_y, root.width /4, self.center_y]
BoxLayout:
canvas.before:
Color:
rgba: 1, 0, 0, 1
Line:
width: dp(2.)
circle: (root.center_x, root.center_y, 190)
'''))
выход
![Overlay 2 layouts](https://i.stack.imgur.com/FXCr7.png)