我正在尝试在屏幕中间构建一个小部件。我没有使用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()
为什么窗口小部件的大小不等于窗口大小的十分之一,为什么它位于窗口右上角的中心位置?
答案 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 =(..)),而不是居中。