在kivy中添加小部件

时间:2014-11-08 18:22:17

标签: python kivy

我正在尝试在屏幕中间构建一个小部件。我没有使用pos_hint或size_hint,因为我稍后会更改窗口小部件的位置,但是当我构建窗口小部件时,它的大小和位置不正确。这是我的代码:

from kivy.app import App
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.graphics import *
from kivy.clock import Clock


class Sprite(Widget):

    def __init__(self, **kwargs):
        super(Sprite, self).__init__(**kwargs)
        Clock.schedule_interval(self.update_canvas, 1.0/60)

    def update_canvas(self, dt):
        with self.canvas:
            Rectangle(size=self.size, pos=self.pos)


class RootWidget(FloatLayout):
    def __init__(self, **kwargs):
        super(RootWidget, self).__init__(**kwargs)
        self.add_widget(Sprite(
            size=(Window.width*0.1, Window.height*0.1),
            center=(Window.width*0.5, Window.height*0.5)
        ))


class MyApp(App):
    def build(self):
        app = RootWidget()
        return app

if __name__=="__main__":
    MyApp().run()

为什么窗口小部件的大小不等于窗口大小的十分之一,为什么它位于窗口右上角的中心位置?

1 个答案:

答案 0 :(得分:3)

大小提示默认为一个值,除非您明确定义它并且它优先于size属性。您可能不希望使用大小提示功能,但除非禁用它,否则默认情况下将覆盖您手动设置的大小。尝试添加以下修改并比较带有和不带size_hint行的结果:

    self.add_widget(Sprite(
        size_hint=(None,None),
        size=(Window.width*0.1, Window.height*0.1),
        center=(Window.width*0.3, Window.height*0.5)
    ))

您可以使用检查器查看实际尺寸:python myscript.py -m inspector并在kivy窗口中点击控制+ E

参考:http://kivy.org/docs/api-kivy.modules.inspector.html

center是(x + width / .2,y + height / .2)的别名,但宽度和高度默认为100.在创建时,这些默认测量值用于反向计算以设置拨打电话时x和y,如果您的身高和宽度不同于100,那么您将被差异抵消。在实例化时直接使用x和y(即pos =(..)),而不是居中。