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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:39:06