首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在小部件的画布中使用嵌套的Kivy参数

在小部件的画布中使用嵌套的Kivy参数
EN

Stack Overflow用户
提问于 2018-06-06 20:44:35
回答 2查看 266关注 0票数 0

我正在使用Kivy语言创建Kivy布局,并且我注意到在定义Widget的画布时似乎不能使用嵌套参数。这就是我的意思:

示例1-这可以很好地运行

代码语言:javascript
复制
<MainWidget>:

    Label:

        text: "Here is a button"
        var1: 1,0,0,1

        canvas.before:
            Color: 
                rgba: self.var1
            Rectangle:
                pos: self.pos
                size: self.size                   

代码语言:javascript
复制
<MainWidget>:

    Label:

        text: "Here is a button"
        var1: 1,0,0,1
        var2: self.var1

        canvas.before:
            Color: 
                rgba: self.var2
            Rectangle:
                pos: self.pos
                size: self.size

两者的Python代码

代码语言:javascript
复制
from kivy.app import App
from kivy.uix.widget import Widget


class MainApp(App):

    def build(self):
        return MainWidget()


class MainWidget(Widget):
    pass


MainApp().run()

我认为这里的问题是,在var1被赋值之前,var2是None,但这直到对象被初始化之后才会发生。有没有办法做我想做的事?

例如,我可以这样做,没有问题:

代码语言:javascript
复制
Label:

    text: "Here is a button"
    var1: 1,0,0,1
    var2: self.var1

    color: self.var2
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-07 00:07:03

发生这种情况有两个原因。

您所指的self指的是Color

如果你给你的标签一个id,那么你可以引用它的属性。

但在您的示例中,这仍然不起作用,因为只有在对象初始化后,var2才会被设置为var1,所以它仍然是ObjectProperty(None)。它将是None,直到下一帧。

如果您在类中将var1定义为ListProperty,则可以使其工作。

在py中。

代码语言:javascript
复制
class MyLabel(Label):
    var2 = ListProperty([0,0,0,0])

然后在kv。

代码语言:javascript
复制
MyLabel:
    id: label
    text: "Here is a button"
    var1: 1,0,0,1
    var2: self.var1

    canvas.before:
        Color: 
            rgba: label.var2
        Rectangle:
            pos: label.pos
            size: label.size
票数 1
EN

Stack Overflow用户

发布于 2018-06-07 21:07:25

感谢@EL3PHANTEN的提示:以下解决方案扩展了他的方法,但不需要对Python进行任何修改或创建自定义类:

** Kivy语言**

代码语言:javascript
复制
<MainWidget>:

    Label:

        text: "Here is a button"
        var1: 1,1,0,1
        var2: self.var1

        canvas.before:
            Color:
                rgba: self.var2 if self.var2 is not None else [0,0,0,0]
            Rectangle: 
                pos: self.pos
                size: self.size

这是因为Kivy语言定义的所有参数似乎都被设置为None,直到它们获得一个值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50720740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档