【问题标题】:How do I draw a quadrilateral with rounded corners in Kivy?如何在 Kivy 中绘制圆角四边形?
【发布时间】:2021-04-03 09:48:32
【问题描述】:

我正在尝试使用 Kivy 的画布说明创建以下形状:

我已经成功地创建了一个直角梯形(下面的代码),

canvas.before:
    Color:
        rgba: root.background_color
    Quad:
        points: [self.x, self.y, self.x, self.y + self.height, self.x + (1.5*self.width), self.y + self.height, self.x + self.width, self.y]

但想知道圆角是否也可以做到这一点?

我可以想到一个解决方法,即保存一个圆形梯形的白色图像,然后用这个图像纹理一个矩形。比如……

canvas.before:
    Color:
        rgba: self.background_color
    Rectangle:
        size: self.size
        pos: self.pos
        source: 'rounded_trapezium.png'

现在background_color 会将白色梯形“着色”为我想要的任何颜色,这意味着我可以多次添加和重新着色相同的形状,而无需保存和加载大量图像。但我很好奇仅使用 Kivy 的画布是否可以实现相同的效果?

提前致谢。

【问题讨论】:

  • 使用 Mesh 指令,您可以创建任何您喜欢的形状,但您需要编写代码来生成其顶点。您可能会发现查看 RoundedRectangle 画布指令的代码很有用,因为您想要的是相同的,但具有边界矩形偏移的角之一。
  • 谢谢@inclement 我会研究网格指令。我在查找 Cavas/Graphic Instruction 源代码时遇到了一些麻烦。有机会给我发个链接吗?

标签: python kivy kivy-language kivymd


【解决方案1】:

我可以提供一个这样的例子,要得到你想要的四边形,你需要编辑 radius 参数

from kivy.app import App
from kivy.lang import Builder

KV = ("""
BoxLayout:
    padding: 50
    FloatLayout:
        canvas.before:
            Color:
                rgba: 0.43, 0.85, 0.56, 1
            RoundedRectangle:
                pos: self.pos
                size: self.size
                radius: [(200, 100), (200, 40), (self.size[0], self.size[0]), (20, 20)]
""")


class MainApp(App):
    def build(self):
        return Builder.load_string(KV)


if __name__ == "__main__":
    MainApp().run()

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2021-11-03
    • 2020-12-14
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    相关资源
    最近更新 更多