You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Kivy不使用kv文件编写AnchorLayout布局的代码错误求助

代码存在的错误

  • 自定义My_Layout类继承AnchorLayout后未实现初始化逻辑,类内部创建的局部layout变量和当前自定义类实例完全无关,子控件没有挂载到自定义布局实例上,定义的布局完全不生效。
  • 自定义App类tests2App未实现Kivy要求必须存在的build()方法,运行时无法获取根布局控件,会直接抛出运行异常。
  • AnchorLayout的所有子控件默认锚定在同一位置,直接添加两个BoxLayout会导致控件重叠,最终仅能看到最后添加的布局内容。

修正后的完整可运行代码

# 首先添加必要的库导入
from kivy.app import App
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label

class My_Layout(AnchorLayout):
    def __init__(self, **kwargs):
        # 调用父类初始化方法
        super().__init__(**kwargs)
        # 第一个BoxLayout锚定到顶部,设置高度占比避免占满全屏
        box1 = BoxLayout(orientation='horizontal', size_hint=(1, 0.1), pos_hint={'top':1})
        btn1 = Button(text='Exit')
        lbl = Label(text='Welcome!')
        btn2 = Button(text='Settings')
        box1.add_widget(btn1)
        box1.add_widget(lbl)
        box1.add_widget(btn2)

        # 第二个BoxLayout锚定到中部
        box2 = BoxLayout(orientation='horizontal', size_hint=(1, 0.1), pos_hint={'center_y':0.5})
        btn3 = Button(text='Option1')
        btn4 = Button(text='Option2')
        btn5 = Button(text='Option3')
        box2.add_widget(btn3)
        box2.add_widget(btn4)
        box2.add_widget(btn5)

        # 子控件添加到当前自定义布局实例self,而非额外创建的AnchorLayout对象
        self.add_widget(box1)
        self.add_widget(box2)

class tests2App(App):
    # 实现build方法返回根布局实例
    def build(self):
        return My_Layout()

# 标准启动入口
if __name__ == "__main__":
    tests2App().run()

内容的提问来源于stack exchange,提问作者Bar Kadosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:09:04