在Clutter中使用BindConstraint来约束actor的大小

时间:2013-09-28 21:22:26

标签: python c gtk clutter

我最近在Clutter中发现constraints,然而,我无法找到有关如何按比例约束演员大小的信息。例如,我希望演员保持另一个演员的宽度的1/2,说它是父母。似乎它只能强制宽度与源一起扩展100%。

1 个答案:

答案 0 :(得分:0)

Clutter.BindConstraint匹配源actor的位置和/或维度属性。对于小数定位,您可以使用Clutter.AlignConstraint,但没有Clutter.Constraint类允许您设置小数维属性。您可以通过继承ClutterConstraint并覆盖Clutter.Constraint虚函数来实现自己的Clutter.Constraint.do_update_allocation(),该函数将传递应该由约束修改的actor的分配。类似于这个(未经测试的)代码应该有效:

class MyConstraint (Clutter.Constraint):
    def __init__(self, source, width_fraction=1.0, height_fraction=1.0):
        Clutter.Constraint.__init__(self)
        self._source = source
        self._widthf = width_fraction
        self._heightf = height_fraction
    def do_update_allocation(self, actor, allocation):
        source_alloc = self._source.get_allocation()
        width = source_alloc.get_width() * self._widthf
        height = source_alloc.get_height() * self._heightf
        allocation.x2 = allocation.x1 + width
        allocation.y2 = allocation.y1 + height

这应该说明Clutter.Constraint用来修改演员分配的机制。