【问题标题】:kivy widgets : multiple buttons, centering, get window/screen dimensionskivy 小部件:多个按钮,居中,获取窗口/屏幕尺寸
【发布时间】:2014-08-21 01:30:22
【问题描述】:

我构建的以下应用程序共有 4 个小部件,1 个主小部件包含 3 个按钮小部件。我试图将主小部件/屏幕上的按钮居中,但主小部件的宽度和高度尺寸似乎只有 100,100,即使屏幕更大。因此,当我尝试将按钮居中放置在屏幕上时,它仍然位于左下角。我可以通过手动设置坐标以将按钮居中到窗口来更改每个按钮的 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()

如果你测试一下,你会发现退出按钮没有居中,而是位于左下角。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

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

    一般而言,您希望使用不同的方式使用 kivy - 不要尝试仅设置一次大小之类的东西,而是将其绑定到另一个小部件的大小,然后它将自动更新.在这种情况下,你可以做例如start.bind(center=startbtn.setter('center')),这是获取设置 startbtn 中心的函数的技巧 - 每当 start 中心发生变化时都会调用此函数。

    即使这在这里有点矫枉过正,你最好还是使用一个布局类,例如一个锚布局,作为顶级小部件。这将为您完成所有工作,自动将其子项居中。您可以将其他 3 个按钮放在另一个布局中,以给它们相对定位。

    使用 kv 语言也使这变得更容易,该语言仅从属性引用自动创建绑定。

    【讨论】:

    • 是的,它只能使一个对象居中,但该对象可以是一个容器,其中包含其他对象的间距,但你喜欢。在 kivy 中嵌套这样的布局通常很有用。
    猜你喜欢
    • 2013-01-14
    • 2018-12-23
    • 1970-01-01
    • 2016-12-13
    • 2019-01-15
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多