动态改变kivy中椭圆的纹理,python

2024-10-03 17:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从python代码中为椭圆添加一个纹理

.kv文件:

    <User>:
        user_name: username
        user_pic: userpic
        size_hint_y: None
        height: '40dp'
        orientation: 'horizontal'
        padding: 2
        BoxLayout:
            id: userpic
            size_hint_x: 0.2
            canvas.before:
                Ellipse:
                    group: 'pic'
                    pos: self.pos
                    size: self.size

python code:
    class User(BoxLayout):
        user_name = ObjectProperty(None)
        def init(self, texture, name):
            self.ids.user_pic.canvas.get_group['pic'][0].texture = texture
            self.user_name.text = name

some portion of the other code:
user = User()
    img = np.array(json.loads(user_dtls[i][1])).reshape(56, 56, 3)
                img = img.astype(np.uint8)
                img = cv2.flip(img, 0)
                texture = Texture.create(size=(56, 56))
                texture.blit_buffer(img.tostring(), colorfmt='bgr', bufferfmt='ubyte')
                user.init(texture, 'demo')
                self.uh.add_widget(user)

获取以下错误:

self.ids.user_pic.canvas.get_group['pic'][0].texture = texture

文件“kivy\properties.pyx”,第841行,in kivy.properties.observedict.getattr AttributeError:'super'对象没有属性'getattr'


Tags: 文件nameselfnoneimgsizegroupcanvas
1条回答
网友
1楼 · 发布于 2024-10-03 17:24:44

所以,尽管没有一个最小的可复制的例子,我认为你的主要问题是:

  • 在一个地方使用userpic,在另一个地方使用user_pic
  • get_group是一个方法,而不是一个列表,因此它应该显示为get_group('pic')
  • 您的pic组正在before组内创建(您正在使用canvas.before),因此canvas.get_group应该是canvas.before.get_group

相关问题 更多 >