PyCharm中Jupyter Notebook的ipywidgets Dropdown组件无法展开显示选项的问题求助及解决记录
PyCharm中Jupyter Notebook的ipywidgets Dropdown组件无法展开显示选项的问题求助及解决记录
最近我遇到了个挺闹心的小问题,在PyCharm里运行带ipywidgets Dropdown组件的Jupyter Notebook时,下拉菜单没法像正常情况那样展开显示选项——只能看到当前选中的第一个值,点击后只有蓝色选中框提示,得靠键盘方向键切换选择,完全看不到下拉列表选项。不过图表倒是能根据选中的值正常更新,下面是我的整个排查和解决过程:
问题复现场景
- 我是想测试一段结合
ipywidgets和matplotlib的代码,实现通过下拉选择年份来动态更新飞行时长图表的功能 - 运行环境:PyCharm内置的Jupyter Notebook,依赖库包括
ipywidgets、matplotlib(启用了%matplotlib widget后端) - 异常表现:Dropdown组件仅显示当前选中值,无法展开下拉列表查看所有可选年份,但图表更新逻辑完全正常
我用到的测试代码
%matplotlib widget # 需要ipympl库支持 import ipywidgets as widgets from IPython.display import display import matplotlib.pyplot as plt # 创建年份下拉选择框 dropdown = widgets.Dropdown( options=list(range(2009, 2020)), # 2009到2019的整数选项 value=2009, # 默认选中2009 description='Jahr:', ) # 初始化matplotlib图表 fig, ax = plt.subplots() fig.dpi = 150 x = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] y = [130, 137, 104, 147, 401, 274, 234, 770, 857, 746, 704] line, = ax.plot(x, y, label="Flugstunden pro Jahr", marker=".") ax.legend() ax.set_title("Flugstunden") ax.set_xlabel("Jahr") ax.set_ylabel("Flugstunden") ax.set_facecolor((0.9,0.9,0.9)) # 定义下拉框值变化的回调函数(方式1:移除旧线条重新绘制) def on_change1(value=2009): """下拉框值变化时,移除旧线条并绘制选中年份的数据点""" # 获取选中年份在x列表中的位置 pos = x.index(value) selected_x = x[pos] selected_y = y[pos] print('选中年份:', selected_x) print('对应飞行时长:', selected_y) # 移除轴上所有旧线条 for l in ax.lines: l.remove() # 绘制新的数据点 ax.plot(selected_x, selected_y, label="Flugstunden pro Jahr", marker=".") # 绑定下拉框与回调函数 widgets.interact(on_change1, value=dropdown)
排查与验证过程
- 首先我把这段代码放到binder在线环境中运行,Dropdown组件完全正常,点击就能展开看到所有年份选项
- 接着我把同一个Notebook文件导出后,在本地的Jupyter Lab中打开运行,下拉菜单也能正常展开
- 这说明代码本身没有问题,问题肯定出在PyCharm IDE对Jupyter Notebook中ipywidgets组件的支持上
最终解决方法
我突然想起自己已经有半年没更新PyCharm了,于是尝试了以下步骤:
- 打开PyCharm的设置,找到「检查更新」选项
- 把IDE更新到了最新的2025.1.3版本
- 重启PyCharm后重新打开这个Jupyter Notebook并运行
- 神奇的事情发生了!Dropdown组件完全正常工作,点击后就能展开看到所有2009-2019的年份选项,和在Jupyter Lab里的表现一模一样!
小提示
如果大家在PyCharm中使用Jupyter Notebook时遇到ipywidgets组件表现异常的情况,优先试试更新到最新的PyCharm版本——很多时候都是旧版本IDE对widgets的渲染支持存在bug,更新后就能解决。
内容来源于stack exchange
相关产品推荐
相关产品推荐

