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

如何在Jupyter Notebook中内嵌显示TkInter绘图输出?

在Jupyter Notebook内嵌实时绘图的纯Python方案

首先得明确:Tkinter本身无法在Jupyter中内嵌显示,因为它依赖本地操作系统的窗口管理器,本质是桌面GUI框架,和Jupyter的网页渲染环境不兼容,所以必然会弹出独立窗口。不过有几个纯Python的替代方案可以实现你的需求,下面逐一介绍:

方案1:Matplotlib + ipympl(推荐,简单易上手)

Matplotlib是Python最常用的绘图库,配合ipympl后端可以在Jupyter中实现交互式内嵌绘图,支持实时更新。

步骤:

  1. 先安装依赖:
pip install ipympl matplotlib
  1. 在Jupyter Notebook中先启用ipympl后端:
%matplotlib widget
  1. 编写实时绘图代码:
import matplotlib.pyplot as plt
import time

# 创建画布和坐标轴,匹配你的分辨率
fig, ax = plt.subplots(figsize=(12, 7))
ax.set_xlim(0, 1280)
ax.set_ylim(0, 720)
ax.set_aspect('equal')

# 初始化红色圆点,对应你代码中的radius=2
point, = ax.plot([100], [100], 'ro', markersize=4)

# 实时更新点的位置
for i in range(1000):
    new_x = 100 + i
    new_y = 100 + i
    point.set_data(new_x, new_y)
    
    # 刷新画布确保实时显示
    fig.canvas.draw()
    fig.canvas.flush_events()
    
    # 控制帧率和你原代码一致
    time.sleep(0.01)

plt.show()

这段代码会在Jupyter单元格内直接显示一个交互式画布,红点会实时向右下角移动,完全内嵌,不会弹出窗口。

方案2:Plotly(适合更美观的交互式可视化)

Plotly是基于JavaScript的可视化库,但提供了纯Python的API,支持在Jupyter中内嵌,并且可以轻松实现实时动画效果。

步骤:

  1. 安装依赖:
pip install plotly
  1. 编写实时绘图代码:
import plotly.graph_objects as go
import plotly.io as pio
import time

# 初始化图形,匹配你的分辨率和点样式
fig = go.Figure(data=[go.Scatter(x=[100], y=[100], mode='markers', marker=dict(color='red', size=4))])
fig.update_layout(xaxis_range=[0, 1280], yaxis_range=[0, 720], width=1280, height=720)

# 在Jupyter中内嵌显示图形
pio.show(fig)

# 实时更新点的位置
for i in range(1000):
    new_x = 100 + i
    new_y = 100 + i
    # 更新数据并刷新图形
    fig.data[0].x = [new_x]
    fig.data[0].y = [new_y]
    fig.update_layout()
    time.sleep(0.01)

Plotly的绘图会内嵌在Jupyter中,还支持缩放、平移等额外交互操作,动画效果流畅。

方案3:Bokeh(适合高性能实时数据可视化)

Bokeh也是纯Python的交互式可视化库,专门针对浏览器渲染优化,适合高频更新的场景,完全支持Jupyter内嵌。

步骤:

  1. 安装依赖:
pip install bokeh
  1. 编写实时绘图代码:
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource
import time

# 启用Jupyter内嵌输出模式
output_notebook()

# 创建数据源和图形,匹配你的参数
source = ColumnDataSource(data=dict(x=[100], y=[100]))
p = figure(x_range=(0, 1280), y_range=(0, 720), width=1280, height=720)
p.circle(x='x', y='y', color='red', size=4, source=source)

# 显示内嵌画布
show(p)

# 实时更新点的位置
for i in range(1000):
    new_x = 100 + i
    new_y = 100 + i
    # 更新数据源触发画布刷新
    source.data = dict(x=[new_x], y=[new_y])
    time.sleep(0.01)

Bokeh的更新效率很高,适合需要快速刷新的场景,同样完全内嵌在Jupyter中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:14:57