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()
关键修改点
- 替换全局plt对象:手动创建
Figure和Axes,避免Matplotlib全局状态干扰工具栏初始化。plt.gcf()容易引入未预期的状态,导致工具栏组件加载异常。 - 强制设置按钮样式:遍历工具栏子按钮,直接设置文字颜色和按钮背景,彻底解决颜色匹配问题。
- 适配布局尺寸:给
toolbar.actionbar设置size_hint_y,确保它在垂直布局中占据合理高度,不会被压缩成无法显示按钮的窄条。
额外验证方向
如果按钮仍不显示,可检查:
- 确认
NavigationToolbar2Kivy是从matplotlib.backends.backend_kivyagg正确导入的 - 尝试调整
figsize和dpi,确保绘图区域与工具栏的布局比例协调
内容的提问来源于stack exchange,提问作者Rohan Suresh
相关产品推荐
相关产品推荐

