Kivy自定义绘图组件无法获取当前尺寸、点击按钮无法更新绘制线条
问题核心原因
你在代码中创建了两个独立的GraphWidget实例:
BoxLayoutMain初始化方法中新建的self.gw,该实例从未被添加到界面布局中,没有经过布局计算,尺寸参数都是默认初始值,你点击按钮调用的就是这个不可见实例的plot方法- 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
相关产品推荐
相关产品推荐

