首页 > 解决方案 > self.pos 的 Kivy 布局背景问题

问题描述

我有一个 kv 语言的标签背景图像,但是在 python 中重新编写了它以为我的标签添加 HoverBehavior 属性。

曾是:

<RockLayout>
canvas:
    Rectangle:
        pos: self.pos
        size: self.size
        source: 'data/images/gui_elements/rock_label.png'

成为:

class RockLayout(FloatLayout, HoverBehavior):  # BoxLayout
def __init__(self, widget, **kwargs):
    super().__init__(**kwargs)
    widget.size_hint = (.8, .8)
    widget.pos_hint = ({'center_x': .5, 'center_y': .52})
    self.add_widget(widget)
    with self.canvas.before:
        Rectangle(source='data/images/gui_elements/rock_label.png', pos=self.pos, size=self.size)

def on_enter(self, *args):
    self.canvas.before.clear()
    with self.canvas.before:
        Rectangle(source='data/images/gui_elements/rock_label_hover.png', pos=self.pos, size=self.size)

def on_leave(self, *args):
    self.canvas.before.clear()
    with self.canvas.before:
        Rectangle(source='data/images/gui_elements/rock_label.png', pos=self.pos, size=self.size)

这导致canvas.before中的self.pos在初始化时没有更新,并且self.pos等于 0。当我调整窗口大小时,图像的位置不会改变。如何在python中声明背景图像,而不是.kv语言?

现在发生了

当我调整窗口大小时 self.pos 没有更新

我需要得到什么

如何在 python 中正确使用 kivy layuot 背景图像?

标签: pythonkivykivy-language

解决方案


    def on_size(self, *args):
        self.bg.size = self.size
        self.bg.pos = self.pos

推荐阅读