我构建的以下应用程序共有4个小部件,1个主要小部件,其中包含3个Button小部件。我试图将主要小部件/屏幕上的按钮居中,但主要小部件的宽度和高度尺寸似乎只有100,100,即使屏幕要大得多。因此,当我尝试将按钮置于屏幕中央时,它仍保留在左下角。我可以通过手动设置co-ords来改变每个按钮的center_x和center_y,使按钮居中到窗口,但是一旦我重新调整窗口大小,按钮将不再居中。关于如何获得当前屏幕尺寸和宽度的任何想法,以便按钮始终位于正确的位置,无论窗口的大小?这就是我到目前为止所做的:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
class MyApp(App):
def build(self):
start=Widget()
startbtn=Button(text="Start")
optionsbtn=Button(text="Options")
exitbtn=Button(text="Exit")
start.add_widget(startbtn)
start.add_widget(optionsbtn)
start.add_widget(exitbtn)
startbtn.center=(start.width,start.height)
optionsbtn.center_x+=200
optionsbtn.center_y+=100
exitbtn.center=start.center
return start
if __name__=="__main__":
MyApp().run()
如果你测试它,你会发现退出按钮没有居中,只是坐在左下角。
答案 0 :(得分:0)
您的start
窗口小部件在您设置其他窗口的中心属性时,默认大小为100, 100
。这是正常行为,即使它被添加到布局(在您的函数完成之前不会生效)。在这种情况下,即使这没关系,因为开始没有设置大小并且没有被添加到任何东西,所以没有理由它的大小将是其他任何东西。
一般情况下,kivy你想以不同的方式工作 - 不要尝试只设置一次大小的东西,而是将绑定到另一个小部件的那个,然后它会自动更新。在这种情况下,你可以做例如start.bind(center=startbtn.setter('center'))
,这是获取设置startbtn中心的函数的技巧 - 只要start
中心发生变化,就会调用此函数。
即使这样做太过分了,你最好还是使用布局类,例如一个anchorlayout,作为顶级小部件。这将为您完成所有工作,自动使其子项居中。您可以在另一个布局中推送其他3个按钮,以便为它们提供相对定位。
使用kv语言也可以更容易,kv语言仅通过属性引用自动创建绑定。