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

为何类中创建的Button与KV文件中的Button表现不一致?

解决Kivy按钮重叠问题

问题根源在于Python代码中Create按钮的事件绑定错误,以及addWidget方法参数缺失,导致新按钮被添加到了触发按钮内部而非GridLayout容器中。

错误分析

  1. Python代码里,on_release=Window.addWidget绑定的是类方法而非实例方法,点击按钮时,addWidget中的self实际是触发事件的Button实例,而非Window(GridLayout)实例。新按钮被添加到这个Button控件内部,自然重叠显示。
  2. addWidget方法未接收Kivy事件回调默认传递的触发控件参数,会导致参数不匹配(即使未直接报错,逻辑也已偏离预期)。

修正后的代码

test.py

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button

class Test(App):
    def build(self):
        return Window()

class Window(GridLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.cols = 2
        self.col_force_default = True
        self.col_default_width = 200
        self.row_force_default = True
        self.row_default_height = 40

        # 绑定当前实例的addWidget方法
        self.add_widget(Button(text="Create", on_release=self.addWidget))

    # 添加instance参数,接收触发事件的控件(符合Kivy回调规则)
    def addWidget(self, instance):
        count = 0
        while count < 10:
            count += 1
            self.add_widget(Button(text=str(count)))

Test().run()

可选:统一用KV管理布局

如果希望完全通过KV文件控制界面,可移除Python中添加Create按钮的代码,避免Window容器内出现重复控件:
test.kv

<Window>:
    cols: 2
    col_force_default: True
    col_default_width: 200
    row_force_default: True
    row_default_height: 40

    Button:
        text: "Create"
        on_release: root.addWidget(self)

对应的简化版test.py:

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button

class Test(App):
    def build(self):
        return Window()

class Window(GridLayout):
    def addWidget(self, instance):
        count = 0
        while count < 10:
            count += 1
            self.add_widget(Button(text=str(count)))

Test().run()

关键修正点

  • 将on_release=Window.addWidget改为on_release=self.addWidget,确保绑定当前Window实例的方法,新按钮会被添加到GridLayout容器中,按2列网格排列。
  • 给addWidget方法添加instance参数,匹配Kivy事件回调的参数传递规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:36:27