如何居中画布?基维

2024-04-23 22:53:00 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将白色方块居中?我试过很多变种,但都没用。它适用于标签和按钮,但不适用于画布。或者我做的每件事都错了。也许你能为这个任务提出最好的解决方案。我需要有背景的窗口,标签在左角,标签在右角和一个正方形在中心

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文件

^{pr2}$

Tags: fromimportselfconfigapppass标签widget
1条回答
网友
1楼 · 发布于 2024-04-23 22:53:00

锚点布局有其自己的画布,您无法自行对齐。这个问题有两种解决办法。在示例中,添加了颜色以进行可视化。在

The AnchorLayout aligns its children to a border (top, bottom, left, right) or center.

解决方案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

用Widget替换最后一个AnchorLaoyout。在

^{pr2}$

示例-解决方案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

相关问题 更多 >