如何在 Kivy (Python) 中叠加 2 个布局?

Ken*_*eno 4 python user-interface overlay kivy

我正在尝试制作一个带有背景网格和顶层交互元素的应用程序,我在通过 python 覆盖第二层时遇到了麻烦,所以就像标题所说,有没有办法在 Kivy 中覆盖 2 个或更多布局?

这就是我要找的

覆盖2个布局kivy

iko*_*lim 6

解决方案

\n\n

opacity第一层/布局的 设为 0.5

\n\n

小部件类 \xc2\xbb 不透明度

\n\n
\n

不透明度

\n\n

小部件及其所有子部件的不透明度。

\n\n

opacity 属性控制小部件及其子部件的不透明度。\n 请注意,它\xe2\x80\x99 是一个累积属性:该值\n 乘以当前的全局不透明度,并将结果应用于\n 当前的上下文颜色。

\n\n

...

\n\n

opacity 是一个NumericProperty,默认为 1.0。

\n
\n\n

Kivy 图形线 \xc2\xbb 点

\n\n
\n

点:列表

\n\n

格式为 (x1, y1, x2, y2\xe2\x80\xa6) 的点列表

\n\n

用于获取/设置直线点的属性

\n\n

警告

\n\n

这将始终从新的点列表重建整个图形。CPU 可能非常昂贵。

\n
\n\n

Kivy 图形线 \xc2\xbb 圆

\n\n
\n

圆圈

\n\n

使用此属性构建一个圆,而不计算点。\n 您只能设置此属性,而不能获取它。

\n\n

参数必须是 (center_x, center_y, radius,\n angle_start, angle_end, snippets) 的元组:

\n\n
    \n
  • center_x和center_y表示圆心
  • \n
  • radius 表示圆的半径
  • \n
  • (可选)angle_start 和angle_end 的单位是度。默认值为 0 和 360。
  • \n
  • (可选)segments 是椭圆的精度。默认值是根据角度之间的范围计算的。
  • \n
\n\n

请注意,是否关闭圆圈由您决定。

\n
\n\n

例子

\n\n

main.py - 没有 kv

\n\n
from kivy.base import runTouchApp\nfrom kivy.core.window import Window\nfrom kivy.uix.screenmanager import Screen\nfrom kivy.uix.boxlayout import BoxLayout\nfrom kivy.graphics import Color, Line\nfrom kivy.metrics import dp\n\nWindow.clearcolor = (1, 1, 1, 1)\n\n\nclass Overlay2Layouts(Screen):\n\n    def __init__(self, **kwargs):\n        super(Overlay2Layouts, self).__init__(**kwargs)\n        self.size = Window.size\n\n        layout1 = BoxLayout(opacity=0.5)\n        with layout1.canvas:\n            Color(1, 0, 0, 1)   # red colour\n            Line(points=[self.center_x, self.height / 4, self.center_x, self.height * 3/4], width=dp(2))\n            Line(points=[self.width * 3/ 4, self.center_y, self.width /4, self.center_y], width=dp(2))\n\n        layout2 = BoxLayout()\n        with layout2.canvas:\n            Color(0, 0, 0, 1)   # black colour\n            Line(circle=[self.center_x, self.center_y, 190], width=dp(2))\n\n        self.add_widget(layout1)\n        self.add_widget(layout2)\n\n\nif __name__ == "__main__":\n    runTouchApp(Overlay2Layouts())\n
Run Code Online (Sandbox Code Playgroud)\n\n

main.py - 使用 kv 和 Python

\n\n
from kivy.lang import Builder\nfrom kivy.base import runTouchApp\nfrom kivy.core.window import Window\n\nWindow.clearcolor = (1, 1, 1, 1)\n\nrunTouchApp(Builder.load_string(\'\'\'\n#:kivy 1.11.0\n\nScreen:\n    BoxLayout:\n        opacity: 0.5\n        canvas.before:\n            Color:\n                rgba: 1, 0, 0, 1\n            Line:\n                width: dp(2.)\n                points: [self.center_x, self.height / 4, self.center_x, self.height * 3/4]\n            Line:\n                width: dp(2.)\n                points: [root.width * 3/ 4, self.center_y, root.width /4, self.center_y]\n    BoxLayout:\n        canvas.before:\n            Color:\n                rgba: 1, 0, 0, 1\n            Line:\n                width: dp(2.)\n                circle: (root.center_x, root.center_y, 190)\n\n\'\'\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出

\n\n

叠加2个布局

\n