Solution
Set the opacity
第一层/布局的 0.5
小部件类 » 不透明度 https://kivy.org/doc/stable/api-kivy.uix.widget.html#kivy.uix.widget.Widget.opacity
opacity
小部件及其所有子部件的不透明度。
opacity 属性控制小部件及其的不透明度
孩子们。注意,这是一个累积属性:值为
乘以当前的全局不透明度,并将结果应用于
当前上下文颜色。
...
不透明度是一个数值属性 https://kivy.org/doc/stable/api-kivy.properties.html#kivy.properties.NumericProperty并默认为 1.0。
Kivy 图形线 » 点 https://kivy.org/doc/stable/api-kivy.graphics.html#kivy.graphics.Line.points
points: list
格式为 (x1, y1, x2, y2…) 的点列表
用于获取/设置直线点的属性
Warning
这将始终从新点重建整个图形
列表。 CPU 可能非常昂贵。
Kivy 图形线 » 圆 https://kivy.org/doc/stable/api-kivy.graphics.html#kivy.graphics.Line.circle
circle
使用此属性来构建圆,而不计算点。
您只能设置此属性,而不能获取它。
参数必须是 (center_x, center_y, radius,
角度_开始、角度_结束、段):
- center_x和center_y表示圆心
- radius 表示圆的半径
- (可选)angle_start 和angle_end 的单位是度。默认值为 0 和 360。
- (可选)segments 是椭圆的精度。默认值是根据角度之间的范围计算的。
请注意,是否关闭圆圈取决于您。
Example
main.py - 没有 kv
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)
'''))
Output