在 kivy 中动态改变 Ellipse 的纹理,python
Dynamically change texture of Ellipse in kivy, python
我想从 python 代码向 Ellipse 添加纹理。
.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 行,位于
kivy.properties.ObservableDict.getattr
AttributeError: 'super' 对象没有属性 'getattr'
因此,尽管没有最小的可重现示例,但我认为这是您的主要问题:
- 在一处使用
userpic
,在另一处使用 user_pic
get_group
是一个方法,不是一个列表,所以它应该显示为 get_group('pic')
- 您的
pic
组正在 before
组内创建(您正在使用 canvas.before
),因此 canvas.get_group
应该是 canvas.before.get_group
我想从 python 代码向 Ellipse 添加纹理。
.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 行,位于 kivy.properties.ObservableDict.getattr AttributeError: 'super' 对象没有属性 'getattr'
因此,尽管没有最小的可重现示例,但我认为这是您的主要问题:
- 在一处使用
userpic
,在另一处使用user_pic
get_group
是一个方法,不是一个列表,所以它应该显示为get_group('pic')
- 您的
pic
组正在before
组内创建(您正在使用canvas.before
),因此canvas.get_group
应该是canvas.before.get_group