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

NavigationToolbar2Kivy无法正常渲染问题求助

解决Kivy中NavigationToolbar2Kivy未正常渲染仅显示黑框的问题

问题分析

代码逻辑无误但工具栏仅显示黑框,核心原因是仅添加了toolbar的actionbar子组件,而非完整的toolbar实例,同时父布局的空间分配导致工具栏被挤压,无法正常加载样式与功能。

解决方案

  1. 直接将NavigationToolbar2Kivy实例添加到布局,而非单独添加actionbar
  2. 给承载图表的GridLayout设置size_hint_y,为工具栏预留显示空间

修改后的完整代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from matplotlib.figure import Figure
from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg as FC
from kivy.garden.matplotlib.backend_kivyagg import NavigationToolbar2Kivy as NT

class APP(App):
    def build(self):
        self.menu = BoxLayout(orientation='vertical')
        # 给GridLayout设置size_hint_y,为toolbar预留垂直空间
        self.grid = GridLayout(cols=1, size_hint_y=0.9)
        self.menu.add_widget(self.grid)

        graphic1 = Figure(figsize=(5, 5), dpi=100)
        a = graphic1.add_subplot(111)
        a.hist([1, 2, 3, 4, 1, 2, 3, 12, 123, 3, 2, 1, 2, 34, 43, 2, 1, 1])

        # 创建Matplotlib画布并添加到GridLayout
        canvas = FC(graphic1)
        self.grid.add_widget(canvas)

        # 创建导航工具栏,直接将toolbar实例添加到布局
        toolbar = NT(canvas)
        self.menu.add_widget(toolbar)

        return self.menu

APP().run()

补充说明

  • NavigationToolbar2Kivy的actionbar是内部依赖组件,单独添加会缺失必要的布局初始化与样式加载逻辑,导致仅显示黑框;直接添加toolbar实例才能确保所有控件正确渲染。
  • 设置GridLayout的size_hint_y=0.9让它占据父布局90%的垂直空间,剩余10%分配给工具栏,避免工具栏被完全挤压无法显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:05:06