Kivy中AnchorLayout固定在左下角

0 投票
2 回答
628 浏览
提问于 2025-04-18 18:00

我开始把一个非常简单的Tkinter应用程序重写成Kivy的版本,但我遇到了一个问题:我的AnchorLayout被固定在左下角,怎么也动不了。我这里有我的代码:

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout



class MyApp(App):

    def build(self):
        controls = AnchorLayout(anchor_x='left', anchor_y='top')
        box = BoxLayout()


        upc_l = Label(text='UPC:', font_size=40, size_hint_y=None, 
                      size_hint_x=None, height=50, width=100,)
        entry = TextInput(font_size=40, size_hint_y=None, size_hint_x=None, 
                          height=50, width=350)
        search_b = Button(text='Search', font_size=40, size_hint_y=None,       
                          size_hint_x=None, height=50, width=200)


        controls.add_widget(box)
        box.add_widget(upc_l)
        box.add_widget(entry)
        box.add_widget(search_b)


        return controls




if __name__ == '__main__':
    MyApp().run()

2 个回答

1

BoxLayout会填满整个窗口,因为它的大小提示是1, 1。它的孩子们都有手动设置的高度和宽度,所以它只是把这些孩子一个接一个地放在自己的左下角,也就是屏幕的左下角,尽管AnchorLayout工作得很好。

给BoxLayout设置一个手动大小,这样效果会更好。实际上,由于你已经手动设置了孩子的大小,使用GridLayout会更合适,GridLayout的大小会根据它的minimum_widthminimum_height属性来调整。

1

好的,我不知道我是不是应该自己回答自己的问题,还是只是评论一下(我刚来Stack Overflow)不过这是我昨晚经过很多小时的烦恼后搞明白的事情。谢谢你的回答,inclement。其实我一直在看你的教程。

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.textinput import TextInput 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout



class MyApp(App):

    def build(self):
        controls = AnchorLayout(anchor_x='right', anchor_y='top', height=200)
        box = BoxLayout(size_hint_y=None, height=50)



        upc_l = Label(text='UPC:', font_size=40, size_hint_x=None, width=100,)
        entry = TextInput(font_size=40, size_hint_x=None, width=350)
        search_b = Button(text='Search', font_size=40, size_hint_x=None,
                          width=200, background_color=[0,1.7,0,1])


        controls.add_widget(box)
        box.add_widget(upc_l)
        box.add_widget(entry)
        box.add_widget(search_b)


        return controls




if __name__ == '__main__':
    MyApp().run()

撰写回答