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
相关产品推荐
相关产品推荐

