如何使用PyMongo将MongoDB Charts嵌入到Kivy应用程序中?
可行实现方案
以下两种方案均可实现MongoDB Charts嵌入Python桌面程序的需求:
方案1:通过WebView组件加载嵌入式iframe(推荐,支持图表交互)
- 首先从MongoDB Charts后台获取嵌入式链接:进入目标图表页面,点击分享按钮选择「嵌入图表」,选择无验证嵌入模式即可获得带完整参数的iframe访问链接,链接已内置chartId、过滤条件、主题等配置,无需手动拼接参数
- 匹配你使用的UI框架选择对应的WebView组件加载该链接即可:
- 若使用PyQt/PySide框架:使用
QWebEngineView组件直接加载上述链接,替换界面空白区域即可 - 若使用Tkinter框架:可集成
tkinterweb库的HtmlFrame组件加载iframe链接 - 若使用Kivy框架:可使用
kivy-garden的garden.webview扩展实现页面加载
- 若使用PyQt/PySide框架:使用
PySide6 加载示例代码
from PySide6.QtWebEngineWidgets import QWebEngineView from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout class MainWindow(QMainWindow): def __init__(self): super().__init__() # 假设原界面已有其他控件,下方空白区域新增WebView main_widget = QWidget() layout = QVBoxLayout(main_widget) # 此处添加你原有的界面控件逻辑 # ... # 新增MongoDB图表区域 self.chart_view = QWebEngineView() # 替换为你自己的MongoDB Charts嵌入链接 self.chart_view.load("https://charts.mongodb.com/charts-<你的项目标识>/embed/charts?id=<你的图表ID>&theme=light") layout.addWidget(self.chart_view) self.setCentralWidget(main_widget)
方案2:调用静态图像API加载纯图片(无交互,适配所有图片组件)
- MongoDB Charts提供公共图像导出API,直接调用即可获取图表的静态PNG资源,可被任意图片加载组件(包括你尝试的AsyncImage)识别
- 你之前尝试用AsyncImage加载失败是因为传入的是图表交互页面地址而非可直接识别的图片资源地址,替换为静态图像API地址即可直接使用AsyncImage加载,无需额外调整逻辑
- API请求格式为
GET https://charts.mongodb.com/charts-<你的项目标识>/api/public/v1/charts/<你的图表ID>/image,你可以在图表嵌入设置页面直接获取对应请求地址 - 若图表设置了访问权限,在请求头中添加
Authorization: Bearer <你的API密钥>即可正常获取图片
静态图获取示例代码
import requests # 替换为你自己的静态图像API地址 CHART_IMAGE_API = "https://charts.mongodb.com/charts-<你的项目标识>/api/public/v1/charts/<你的图表ID>/image" # 无权限验证场景直接请求 resp = requests.get(CHART_IMAGE_API) # 保存到本地后可直接加载,或直接将字节流传给图片组件 with open("daily_duration_chart.png", "wb") as f: f.write(resp.content)
内容的提问来源于stack exchange,提问作者Jayanti
相关产品推荐
相关产品推荐

