获取Matplotlib';s GTK Agg后端尊重用户主题
我正在编写一个PyGTK/Twisted应用程序,它使用Matplotlib进行绘图。使用FigureCanvasGtkAgg在我的小部件中嵌入绘图非常容易,但是我注意到画布的背景颜色(绘图区域本身之外)与我的应用程序的其余部分不匹配,字体(标签、图例等)也不匹配获取Matplotlib';s GTK Agg后端尊重用户主题,matplotlib,pygtk,Matplotlib,Pygtk,我正在编写一个PyGTK/Twisted应用程序,它使用Matplotlib进行绘图。使用FigureCanvasGtkAgg在我的小部件中嵌入绘图非常容易,但是我注意到画布的背景颜色(绘图区域本身之外)与我的应用程序的其余部分不匹配,字体(标签、图例等)也不匹配 有没有一种简单的方法可以让我的图表尊重用户选择的GTK主题?您可以通过设置,例如或。看起来它的默认值是,所以没有办法告诉MPL尊重GTK主题 下面是一个在PyGTK中如何实现这一点的具体示例。这里的一些信息是从文档中收集的。我还没有
有没有一种简单的方法可以让我的图表尊重用户选择的GTK主题?您可以通过设置,例如或。看起来它的默认值是,所以没有办法告诉MPL尊重GTK主题
下面是一个在PyGTK中如何实现这一点的具体示例。这里的一些信息是从文档中收集的。我还没有设置字体等等,但这显示了您需要的基本框架 首先,定义以下函数:
def set_graph_appearance(container, figure):
"""
Given a GTK container and a Matplotlib "figure" object, this will set the
figure background colour to be the same as the normal colour of the
container.
"""
# "bg" is the background "style helper" object. It contains five different
# colours, for the five different widget states.
bg_style = container.get_style().bg[gtk.STATE_NORMAL]
gtk_color = (bg_style.red_float, bg_style.green_float, bg_style.blue_float)
figure.set_facecolor(gtk_color)
然后,您可以连接到realize
信号(也可能是map事件
信号,我没有尝试过),并在创建包含小部件时重新给图形上色:
graph_panel.connect('realize', set_graph_appearance, graph.figure)
(这里,
graph_panel
是一个gtk。Alignment
和graph
是FigureCanvasGTKAgg
的一个子类,根据需要有一个figure
成员。)我非常想看看您的代码,因为我也在尝试将PyPlot放入我的小部件中,或者更准确地说,只需在内部使用图形GUI@heltonbiker-您需要等待几天,但我将在再次访问代码时发布一个示例。太好了!这让我开始了,所以我添加了一些代码,说明在绘图时如何实现将背景更改为包含小部件的GTK主题。唯一的问题是,如果用户在绘制图形后更改了主题,图形将不会更改颜色。我认为这是一个足够小的边缘案例,可以忽略。太好了!谢谢你的跟进。