调用Matplotlib函数后DearPyGui视口缩小问题求助
解决DearPyGui与Matplotlib联动时视口缩小的问题
方案1:同步DPI设置修复独立窗口冲突
问题根源是Matplotlib默认DPI与DearPyGui视口DPI不匹配,导致显示图表后系统缩放设置被修改。手动同步两者DPI即可解决:
import dearpygui.dearpygui as dpg import matplotlib.pyplot as plt def open_graph(): # 获取DearPyGui视口的DPI值 viewport_dpi = dpg.get_viewport_dpi() # 强制Matplotlib使用相同DPI plt.rcParams['figure.dpi'] = viewport_dpi plt.plot([1, 2, 3, 4, 5]) plt.show() # 可选:关闭图表后恢复Matplotlib默认DPI plt.rcParams['figure.dpi'] = plt.rcParamsDefault['figure.dpi'] dpg.create_context() dpg.create_viewport() dpg.setup_dearpygui() with dpg.window(label="Example Window", tag="primary"): dpg.add_button(label="Open Graph", callback=open_graph) dpg.show_viewport() dpg.set_primary_window("primary", True) dpg.start_dearpygui() dpg.destroy_context()
方案2:将Matplotlib图表嵌入DearPyGui窗口(推荐)
使用DearPyGui内置的Matplotlib集成组件,把图表直接嵌入窗口,彻底避免独立窗口的冲突问题:
import dearpygui.dearpygui as dpg import matplotlib.pyplot as plt from matplotlib.backends.backend_agg import FigureCanvasAgg def update_graph(): # 创建Matplotlib图表 fig, ax = plt.subplots() ax.plot([1, 2, 3, 4, 5]) # 将图表渲染到DearPyGui的mpl_plot组件 canvas = FigureCanvasAgg(fig) canvas.draw() renderer = canvas.get_renderer() buf = renderer.buffer_rgba() dpg.set_value("plot", buf) # 清理Matplotlib资源,防止内存泄漏 plt.close(fig) dpg.create_context() dpg.create_viewport() dpg.setup_dearpygui() with dpg.window(label="Example Window", tag="primary"): dpg.add_button(label="Update Graph", callback=update_graph) # 创建用于显示图表的mpl_plot组件 dpg.add_mpl_plot(tag="plot", width=600, height=400) dpg.show_viewport() dpg.set_primary_window("primary", True) dpg.start_dearpygui() dpg.destroy_context()
补充提示
- 若更换后端无效,可在导入Matplotlib前指定后端:
import matplotlib matplotlib.use('TkAgg') # 或'Qt5Agg',根据系统支持选择 - 复杂图表建议放在子线程绘制,完成后用
dpg.invoke_callback在主线程更新UI,避免阻塞DearPyGui界面。
内容的提问来源于stack exchange,提问作者Kai Albertson
相关产品推荐
相关产品推荐

