如何中心帆布? kivy

时间:2018-06-16 14:44:04

标签: python kivy kivy-language

如何将白色方块放在中心?我尝试了很多变种,但没有任何效果。它适用于Label和Buttons,但不适用于canvas。或者也许我以错误的方式做所有事情。也许你建议这项任务的最佳解决方案。我需要带背景的窗口,左角标签,右角标签和中心广场

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.uix.floatlayout import FloatLayout
from kivy.config import Config
from kivy.animation import Animation

from kivy.vector import Vector
from kivy.clock import Clock
from kivy.properties import NumericProperty, ReferenceListProperty,\
    ObjectProperty

Config.set('graphics', 'resizable', 'true')
Config.set('graphics', 'width', '900')
Config.set('graphics', 'height', '450')
Config.write()

class Helicopter(Widget):
    pass


class Background(Widget):
    pass


class Root(FloatLayout):
    #def on_touch_down(self, touch):
     #   Animation(center=touch.pos).start(self)
    pass

class FriendsApp(App):
    def build(self):

        return Root()

if __name__ == '__main__':
    FriendsApp().run()

.kv文件

#: kivy 1.10.0
<Root>
    AnchorLayout:
        canvas.before:
            Color:
                rgba: 1, 1, 1, 1  # white
            Rectangle:
                source: 'background.jpg'
                pos: self.pos
                size: self.size
        size: self.parent.size
        anchor_x: 'center'
        anchor_y: 'center'


    AnchorLayout:
        anchor_y:'top'
        anchor_x:'left'
        padding: 20
        Label:
            text: 'Lives: x2'
            size: self.texture_size
            size_hint: None, None

    AnchorLayout:
        anchor_x: 'right'
        anchor_y: 'top'
        padding: 20
        Label:
            text: 'Score: 0000000'
            size: self.texture_size
            size_hint: None,None

    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'center'
        canvas:
            Rectangle:
                size: 100, 100
                pos: self.pos

1 个答案:

答案 0 :(得分:0)

AnchorLayout有自己的画布,你不能自己调整。这个问题有两种解决方案。在该示例中,添加了颜色以进行可视化。

  

AnchorLayout将其子项与边界对齐(顶部,底部,   左,右)或中心。

解决方案1 ​​

作为孩子添加 小部件

AnchorLayout:
    anchor_x: 'center'
    anchor_y: 'center'
    Widget:
        canvas.before:
            Color:
                rgba: 1, 1, 1, 1  # white
            Rectangle:
                size: 100, 100
                pos: self.pos
        size_hint: None,None

解决方案2

将最后的 AnchorLaoyout 替换为 Widget

Widget:
    canvas:
        Rectangle:
            pos: self.center_x - 50, self.center_y - 50
            size: 100, 100

示例 - 解决方案1 ​​

kv文件

#: kivy 1.10.0

<Root>
    AnchorLayout:
        anchor_y:'top'
        anchor_x:'left'
        padding: 20
        Label:
            canvas.before:
                Color:
                    rgba: 1, 0, 0, 1  # red
                Rectangle:
                    pos: self.pos
                    size: self.size
            text: 'Lives: x2'
            size: self.texture_size
            size_hint: None, None

    AnchorLayout:
        anchor_x: 'right'
        anchor_y: 'top'
        padding: 20
        Label:
            canvas.before:
                Color:
                    rgba: 0, 0, 1, 1  # blue
                Rectangle:
                    pos: self.pos
                    size: self.size
            text: 'Score: 0000000'
            size: self.texture_size
            size_hint: None,None

    AnchorLayout:
        anchor_x: 'center'
        anchor_y: 'center'
        Widget:
            canvas.before:
                Color:
                    rgba: 1, 1, 1, 1  # white
                Rectangle:
                    size: 100, 100
                    pos: self.pos
            size_hint: None,None

输出

Img01