Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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的画布中引用孩子的id?_Python_Kivy - Fatal编程技术网

Python 如何在Kivy的画布中引用孩子的id?

Python 如何在Kivy的画布中引用孩子的id?,python,kivy,Python,Kivy,当我尝试将id分配给画布时,我在声明后得到了错误Invalid data,但我没有看到下面引用id的任何其他方法,例如e1。如何在Python代码中引用e1 <MyClockWidget>: face: face ticks: ticks el1: el1 FloatLayout: id: face size_hint: None, None pos_hint: {"center_x":0.5, "cen

当我尝试将id分配给画布时,我在声明后得到了错误Invalid data,但我没有看到下面引用id的任何其他方法,例如e1。如何在Python代码中引用e1

<MyClockWidget>:
    face: face
    ticks: ticks
    el1: el1
    FloatLayout:
        id: face
        size_hint: None, None
        pos_hint: {"center_x":0.5, "center_y":0.5}
        size: 0.9*min(root.size), 0.9*min(root.size)
        canvas:
            id: cand
            Color:
                rgb: 0.5, 0.5, 0.5
            Ellipse:
                size: self.size     
                pos: self.pos
        canvas:
            Color:
                rgb: 0.1, 0.1, 0.1
            Ellipse:
                id: el1
                size: self.size     
                pos: self.pos
                angle_start: 0
                angle_end: 90
            Ellipse:
                id: el2
                size: self.size     
                pos: self.pos
                angle_start: 110
                angle_end: 130
我不认为in-kv-lang的使用有很好的文档记录,但这里有一个示例,说明如何使用它们来访问画布元素。此示例还显示了如何使用属性控制画布指令的各个方面:

from kivy.app import App
from kivy.uix.slider import Slider
from kivy.lang import Builder
from kivy.graphics import Color

kv = """
#:kivy 1.9.1
BoxLayout:
    orientation: 'vertical'
    Widget:
        id: w_canvas
        my_color: (0, 1, 1)
        canvas:
            Color:
                rgb: self.my_color
            Rectangle:
                pos: self.pos
                size: (self.width/2, self.height/2)
            Color:
                group: 'b'
                rgb: (0, .8, 0)
            Ellipse:
                group: 'a'
                pos: (self.pos[0], self.pos[1] + self.height/2)
                size: (self.width/4, self.height/4)
            Ellipse:
                group: 'b'
                pos: (self.pos[0]+ self.width/2, self.pos[1] + self.height/2)
                size: (self.width/4, self.height/4)
    Button:
        text: 'Click me'
        on_release: app.handle_button()
"""
class Test(App):
    def build(self):
        return Builder.load_string(kv)
    def handle_button(self):
        # binding Canvas instruction property to Widget property
        self.root.ids.w_canvas.my_color = (.5, .2, 0)
        # Access single item of canvas instruction group
        an_ellipse = self.root.ids.w_canvas.canvas.get_group('a')[0]
        an_ellipse.pos = (an_ellipse.pos[0] + 10, an_ellipse.pos[1])
        # loop through all elements of canvas instruction group
        for gitem in self.root.ids.w_canvas.canvas.get_group('b'):
            if isinstance(gitem, Color):
                gitem.rgb = (0, .5, 1)
            try:
                gitem.size = (gitem.size[0] / 2.0, gitem.size[1])
            except:
                pass

Test().run()
我不认为in-kv-lang的使用有很好的文档记录,但这里有一个示例,说明如何使用它们来访问画布元素。此示例还显示了如何使用属性控制画布指令的各个方面:

from kivy.app import App
from kivy.uix.slider import Slider
from kivy.lang import Builder
from kivy.graphics import Color

kv = """
#:kivy 1.9.1
BoxLayout:
    orientation: 'vertical'
    Widget:
        id: w_canvas
        my_color: (0, 1, 1)
        canvas:
            Color:
                rgb: self.my_color
            Rectangle:
                pos: self.pos
                size: (self.width/2, self.height/2)
            Color:
                group: 'b'
                rgb: (0, .8, 0)
            Ellipse:
                group: 'a'
                pos: (self.pos[0], self.pos[1] + self.height/2)
                size: (self.width/4, self.height/4)
            Ellipse:
                group: 'b'
                pos: (self.pos[0]+ self.width/2, self.pos[1] + self.height/2)
                size: (self.width/4, self.height/4)
    Button:
        text: 'Click me'
        on_release: app.handle_button()
"""
class Test(App):
    def build(self):
        return Builder.load_string(kv)
    def handle_button(self):
        # binding Canvas instruction property to Widget property
        self.root.ids.w_canvas.my_color = (.5, .2, 0)
        # Access single item of canvas instruction group
        an_ellipse = self.root.ids.w_canvas.canvas.get_group('a')[0]
        an_ellipse.pos = (an_ellipse.pos[0] + 10, an_ellipse.pos[1])
        # loop through all elements of canvas instruction group
        for gitem in self.root.ids.w_canvas.canvas.get_group('b'):
            if isinstance(gitem, Color):
                gitem.rgb = (0, .5, 1)
            try:
                gitem.size = (gitem.size[0] / 2.0, gitem.size[1])
            except:
                pass

Test().run()

看一看,它解释了如何访问和删除特定指令。如果要更改指令的属性,请将它们绑定到根节点的属性,如:e1\u start:0。。。Ellipse:angle\u start:root.e1\u start.@Zeemonkez你帮了我很大的忙,昨天午夜我的头撞到了墙上。如果你将此作为答复提交,我将愉快地接受,谢谢!看一看,它解释了如何访问和删除特定指令。如果要更改指令的属性,请将它们绑定到根节点的属性,如:e1\u start:0。。。Ellipse:angle\u start:root.e1\u start.@Zeemonkez你帮了我很大的忙,昨天午夜我的头撞到了墙上。如果你将此作为答复提交,我将愉快地接受,谢谢!