在 Kivy 中计算相对于其他对象的属性

我是第一次尝试使用 Kivy。我已经使用从外部文件导入了一个函数


#:import centerAlign helperFunctions.centerAlign

我的函数(centerAlign)如下所示:


def centerAlign(elem, parent):

    pos = [parent.width/2-elem.width/2, parent.height/2-elem.height/2]

    return pos

它的实现看起来像这样:


    GridLayout:

        cols: 2

        spacing: 10

        size_hint: 0.5, 0.25

        pos: centerAlign(self, root)

此操作失败,因为它计算两个元素(根元素和 GridLayout)的高度和宽度均为 100。但是,我知道这应该有效,因为当我说:


    GridLayout:

        cols: 2

        spacing: 10

        size_hint: 0.5, 0.25

        pos: [root.width/2-self.width/2, root.height/2-self.height/2]

效果很好!所以我真的不明白这里发生了什么。我对 Python 有点陌生,所以希望这是一个简单的事情,经验丰富的老手可以提供一些启发。提前致谢!


互换的青春
浏览 76回答 1
1回答

四季花海

pos: [root.width/2-self.width/2, root.height/2-self.height/2]当 kv 解析这一行时,可以看到pos当 root.width、root.height、self.width 或 self.height 改变时它需要更新,因为它们都在这里被引用。为了实现这一点,会自动创建绑定。 pos: centerAlign(self, root)在此行中没有任何要绑定的属性,因此当发生任何更改时不会更新。因此,您只能得到基于宽度/高度初始值(100)的结果。要解决此问题,请在 kv 行中引用您想要绑定的属性,或者编写一些其他代码来创建您想要的绑定。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python