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

Kivy自定义绘图组件无法获取当前尺寸、点击按钮无法更新绘制线条

问题核心原因

你在代码中创建了两个独立的GraphWidget实例:

  1. BoxLayoutMain初始化方法中新建的self.gw,该实例从未被添加到界面布局中,没有经过布局计算,尺寸参数都是默认初始值,你点击按钮调用的就是这个不可见实例的plot方法
  2. kv文件中声明的GraphWidget,是实际显示在界面上的实例,但你从来没有对这个实例调用过plot方法

修改方案

我们通过给kv中的组件绑定id,直接调用界面上实际渲染的实例方法即可,修改代码如下:

1. 修改kv文件,给GraphWidget添加id

BoxLayoutMain:

<BoxLayoutMain>:
    orientation: 'horizontal'

    Button:
        text: 'Click'
        on_press: root.plot_line()

    GraphWidget:
        id: graph_widget  # 新增id绑定

<GraphWidget>:

    canvas:
        Color:
            rgb: 1,0,0
        Line:
            width: 2
            points: self.trace_points

2. 修改Python代码中的BoxLayoutMain类

class BoxLayoutMain(BoxLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 删掉原来的self.gw = GraphWidget()这行,不需要额外新建实例

    def plot_line(self):
        # called when user clicks button
        data = np.asarray([[0,0],[100,100],[200,50]]) # test data
        # 从ids中获取界面上实际显示的GraphWidget实例调用plot方法
        self.ids.graph_widget.plot(data, min_x=0, max_x=200, min_y=0, max_y=150)

修改完成后运行代码,点击按钮即可看到线条正常绘制,plot方法中也能拿到正确的组件尺寸和位置参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:15:03