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

Kivy嵌入Matplotlib后NavigationToolbar按钮不显示问题求助

解决Kivy中Matplotlib NavigationToolbar按钮不显示的问题

问题本质

你遇到的黑色/灰色矩形问题,核心是工具栏按钮颜色与背景色重合,再加上Matplotlib全局状态干扰、布局尺寸未适配,导致按钮无法正常显示。

修正后的完整代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from matplotlib.figure import Figure
from matplotlib.backends.backend_kivyagg import FigureCanvasKivyAgg, NavigationToolbar2Kivy

class MyApp(App):
    def build(self):
        box = BoxLayout(orientation='vertical')
        box.add_widget(Label(text='My App', size_hint_y=.1))

        # 手动创建Figure,替代全局plt.gcf(),避免状态冲突
        fig = Figure(figsize=(5, 4), dpi=100)
        ax = fig.add_subplot(111)
        ax.plot([1, 3, 2, 4])

        canvas = FigureCanvasKivyAgg(fig)
        toolbar = NavigationToolbar2Kivy(canvas)

        # 调整工具栏背景与按钮颜色,确保按钮可见
        toolbar.actionbar.background_color = (1, 1, 1, 1)  # 白色背景
        # 遍历工具栏按钮,设置颜色与样式
        for btn in toolbar.actionbar.children[0].children:
            btn.color = (0, 0, 0, 1)  # 黑色按钮文字/图标
            btn.background_normal = ''
            btn.background_color = (0.9, 0.9, 0.9, 1)  # 浅灰色按钮背景

        # 给工具栏设置合适的高度比例
        toolbar.actionbar.size_hint_y = 0.1

        box.add_widget(canvas)
        box.add_widget(toolbar.actionbar)
        
        return box

MyApp().run()

关键修改点

  1. 替换全局plt对象:手动创建Figure和Axes,避免Matplotlib全局状态干扰工具栏初始化。plt.gcf()容易引入未预期的状态,导致工具栏组件加载异常。
  2. 强制设置按钮样式:遍历工具栏子按钮,直接设置文字颜色和按钮背景,彻底解决颜色匹配问题。
  3. 适配布局尺寸:给toolbar.actionbar设置size_hint_y,确保它在垂直布局中占据合理高度,不会被压缩成无法显示按钮的窄条。

额外验证方向

如果按钮仍不显示,可检查:

  • 确认NavigationToolbar2Kivy是从matplotlib.backends.backend_kivyagg正确导入的
  • 尝试调整figsize和dpi,确保绘图区域与工具栏的布局比例协调

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:32:19