Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Kivy GUI-在圆形中填充颜色,就像在圆形容器中填充水一样_Python_Kivy - Fatal编程技术网

Python Kivy GUI-在圆形中填充颜色,就像在圆形容器中填充水一样

Python Kivy GUI-在圆形中填充颜色,就像在圆形容器中填充水一样,python,kivy,Python,Kivy,如上图所示,我需要在Kivy GUI中编写一个.kv文件,以便在值增加时显示一个填充颜色的圆圈。对于0值,它是空的,因为值增加圆用颜色填充 我如何才能做到这一点?这种效果可以通过为此创建一个遮罩来实现,您可以使用如下所示: from kivy.app import App from kivy.lang import Builder main_widget_kv = ''' BoxLayout: border: 10 WaterFill: level: slide

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


我如何才能做到这一点?

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

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()

这种效果可以通过创建一个遮罩来实现,您可以使用该遮罩,如下所示:

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()

伟大的解决方案,谢谢您的帮助。我更改了level的值而不是slider。但应该如何通过调用from方法来更改该值。请再给我一个帮助。@Bhu_24我添加了一个例子。如果我的答案对您有帮助,请不要忘记将其标记为正确,如果您不知道如何操作,请检查“对不起,我是新用户”中的堆栈溢出。你的解决方案对我很有帮助。再次感谢。同样的,还有一个帮助。如何使用相同的逻辑更改2个或多个圆形填充布局。我试图定义id,但没有办法做到这一点???请help@Bhu_24创建一个新问题,详细说明您尝试过的内容以及遇到的问题。太好了!!!解决方案,谢谢您的帮助。我更改了level的值而不是slider。但应该如何通过调用from方法来更改该值。请再给我一个帮助。@Bhu_24我添加了一个例子。如果我的答案对您有帮助,请不要忘记将其标记为正确,如果您不知道如何操作,请检查“对不起,我是新用户”中的堆栈溢出。你的解决方案对我很有帮助。再次感谢。同样的,还有一个帮助。如何使用相同的逻辑更改2个或多个圆形填充布局。我试图定义id,但没有办法做到这一点???请help@Bhu_24创建一个新问题,详细说明您尝试过的内容以及遇到的问题。