Tkinter嵌入Matplotlib绘图时Cursor十字光标无法显示问题求助
问题根因
- 你定义的
cursor是局部变量,当前代码块执行结束后就会被Python垃圾回收机制销毁,Matplotlib的事件回调无法持有这个光标实例,因此光标无法正常渲染,同时你后续没有调用过cursor变量,所以Pylance会抛出未访问的警告。 useblit=True参数在TkAgg后端的兼容性较差,也是导致光标不显示的常见原因。
解决方法
按照以下两点修改代码即可:
- 把
cursor变量转为长生命周期的对象,避免被垃圾回收:如果你的代码写在类方法里,就改为self.cursor = Cursor(...);如果写在全局/函数作用域里,也可以直接绑定到canvas对象上,比如canvas.cursor = Cursor(...)。 - 把
useblit参数设置为False适配Tk嵌入场景。
修改后的代码示例
figure = Figure(figsize=(5, 4), dpi=100) plot = figure.add_subplot(1, 1, 1) figure.suptitle(Date, fontsize=12) plot.plot(x, y, color=Color) canvas = FigureCanvasTkAgg(figure, root) canvas.get_tk_widget().place(x=4,y=200) toolbar = NavigationToolbar2Tk(canvas, root, pack_toolbar=False) toolbar.update() toolbar.place(x=4,y=600) # 修改部分:将cursor绑定到canvas避免被回收,关闭useblit canvas.cursor = Cursor(plot, useblit=False, horizOn=True, vertOn=True, color="green", linewidth=2.0)
内容的提问来源于stack exchange,提问作者Joe_bart
相关产品推荐
相关产品推荐

