我想在屏幕中间构建一个小部件。我没有使用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/10,为什么它是在窗口右上角的中心?
因为size_hint和pos_hint将属性绑定到窗口小部件。然后,我不能通过简单地增加或减少它的x和y值来改变小部件的位置。通过上面的代码,将“self.x + = 1”添加到更新画布函数中,该小部件将移动。如果我用pos_hint定义了那个,那么小部件的位置会将每一帧重新设置回原来的位置。 – 2014-11-08 20:36:47
你确定floatlayout自动填充整个窗口大小吗?如果不是这样,它可能会解释为什么雪碧不会做你想做的事。也许尝试首先将RootWidget的大小设置为它的父级大小(可能是window.size),然后设置Sprites大小和中心可能工作。 – Totem 2014-11-08 21:15:47
是RootWidget是在MyApp的构建函数中返回时定义的根构件。它会自动形成窗口并在窗口更改大小时重新调整大小。我向RootWidget添加了一个函数来打印它的大小以及窗口的大小,它们是相同的。 – 2014-11-08 21:38:53