Kivy GUI-将颜色像水一样填充到圆圈中,明智地将圆圈填充到圆圈容器中 [英] Kivy GUI - fill color in circle like water fill in circle container level wise

查看:122
本文介绍了Kivy GUI-将颜色像水一样填充到圆圈中,明智地将圆圈填充到圆圈容器中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如上图所示,我需要在Kivy GUI中编写一个.kv文件,以便随着值的增加,我可以显示一个用颜色填充的圆圈.对于0值,它是空的,因为增加值的圆圈用颜色填充.

As shown in the image above I need to code a .kv file in the Kivy GUI so I can show a circle filling with color as a value increase. For 0 value it is empty as value increase circle is fill with color.

我该怎么做?

推荐答案

可以通过为此创建一个遮罩来实现这种效果,您可以使用

That kind of effect can be done by creating a mask for this you can use Stencil instructions as shown below:

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

main_widget_kv = '''
BoxLayout:
    border: 10
    WaterFill:
        level: slider.value_normalized
        color: 1, 1, 0
    Slider:
        id: slider
        orientation: 'vertical'
        value: 50

<WaterFill@Widget>:
    level: 0.1
    width: self.height
    size_hint: None, 1
    color: 0, 0, 1
    canvas:
        StencilPush
        Ellipse:
            pos: root.pos
            size: root.size

        StencilUse

        Color:
            rgb: root.color
        Rectangle:
            pos: root.pos
            size: (root.width, root.level*root.height)

        StencilUnUse

        StencilPop
'''

class TestApp(App):
    def build(self):
        return Builder.load_string(main_widget_kv)

if __name__ == '__main__':
    TestApp().run()

更新:

以下示例显示了如何在Clock的帮助下使用方法更新高度值的示例:

The following example shows an example of how to update the height value using a method with the help of Clock:

from kivy.app import App
from kivy.clock import Clock
from kivy.uix.widget import Widget
from kivy.uix.anchorlayout import AnchorLayout
from kivy.lang import Builder

Builder.load_string("""
<WaterFill>:
    level: 0.0
    width: self.height
    size_hint: None, 1
    color: 0, 0, 1
    canvas:
        StencilPush
        Ellipse:
            pos: root.pos
            size: root.size
        StencilUse
        Color:
            rgb: root.color
        Rectangle:
            pos: root.pos
            size: (root.width, root.level*root.height)
        StencilUnUse
        StencilPop
""")


class WaterFill(Widget):
    def __init__(self, *args, **kwargs):
        Widget.__init__(self, *args, **kwargs)
        self.delta = 0.01

        Clock.schedule_interval(self.on_timeout, 0.05)

    def on_timeout(self, *args):
        self.level += self.delta
        if self.level >= 1:
            self.delta = -0.01
        elif self.level <= 0:
            self.delta = 0.01


class TestApp(App):
    def build(self):
        lay = AnchorLayout(anchor_x='center', anchor_y='center')
        lay.add_widget(WaterFill())
        return lay


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

这篇关于Kivy GUI-将颜色像水一样填充到圆圈中,明智地将圆圈填充到圆圈容器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆