Kivy按钮点击调用其他类未显示大矩形的问题求助
Kivy点击按钮显示大矩形的解决方案
问题核心原因
你的代码存在两个关键问题:
- 实例化
sub类后没有将其添加到当前界面的布局容器中,导致新矩形无法显示 - Python中的类名
sub与kv文件中的<Sub>大小写不匹配,Kivy无法正确关联对应的样式
完整修改方案
以下是调整后的可运行代码:
修改后的Python代码
from kivy.app import App from kivy.uix.widget import Widget class Main(Widget): def __init__(self,**kwargs): super().__init__(**kwargs) def on_press(self): # 实例化Sub类 new_sub = Sub() # 将Sub实例添加到Main的布局容器中 self.ids.main_layout.add_widget(new_sub) class Sub(Widget): # 修正类名大小写,与kv文件的<Sub>对应 def __init__(self,**kwargs): super().__init__(**kwargs) class Rect(App): def build(self): return Main() if __name__=='__main__': Rect().run()
修改后的kv文件代码
<Main>: FloatLayout: id: main_layout # 添加id,方便Python代码获取该布局容器 canvas: Rectangle: pos:100,0 size:200,200 Button: text:'Click' on_press:root.on_press() <Sub>: FloatLayout: canvas: Rectangle: pos:100,0 size:400,400
关键修改说明
- 给Main内的FloatLayout添加
id: main_layout,让Python代码能直接定位到布局容器 - 将Python中的
sub类名改为Sub,与kv文件的<Sub>保持一致,确保样式能正确加载 - 在
on_press方法中,通过add_widget()将Sub实例添加到布局里,让新矩形显示在界面上
如果需要点击按钮后替换原有的小矩形,可以在添加Sub前清空布局,再重新添加按钮:
def on_press(self): self.ids.main_layout.clear_widgets() new_sub = Sub() self.ids.main_layout.add_widget(new_sub) # 重新添加按钮 from kivy.uix.button import Button btn = Button(text='Click', on_press=self.on_press) self.ids.main_layout.add_widget(btn)
内容的提问来源于stack exchange,提问作者abdulla thahir
相关产品推荐
相关产品推荐

