kivy小部件:多个按钮,居中,获取窗口/屏幕尺寸

时间:2014-08-21 01:30:23

标签: python kivy

我构建的以下应用程序共有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()

如果你测试它,你会发现退出按钮没有居中,只是坐在左下角。

1 个答案:

答案 0 :(得分:0)

您的start窗口小部件在您设置其他窗口的中心属性时,默认大小为100, 100。这是正常行为,即使它被添加到布局(在您的函数完成之前不会生效)。在这种情况下,即使这没关系,因为开始没有设置大小并且没有被添加到任何东西,所以没有理由它的大小将是其他任何东西。

一般情况下,kivy你想以不同的方式工作 - 不要尝试只设置一次大小的东西,而是绑定到另一个小部件的那个,然后它会自动更新。在这种情况下,你可以做例如start.bind(center=startbtn.setter('center')),这是获取设置startbtn中心的函数的技巧 - 只要start中心发生变化,就会调用此函数。

即使这样做太过分了,你最好还是使用布局类,例如一个anchorlayout,作为顶级小部件。这将为您完成所有工作,自动使其子项居中。您可以在另一个布局中推送其他3个按钮,以便为它们提供相对定位。

使用kv语言也可以更容易,kv语言仅通过属性引用自动创建绑定。