获得Matplotlib的GTK Agg后端以尊重用户主题

我正在编写一个使用Matplotlib进行图形绘制的PyGTK / Twisted应用程序。 使用FigureCanvasGtkAgg嵌入我的小部件很容易,但我注意到画布的背景颜色(绘图区域本身之外)与我的应用程序的其余部分不匹配,并且字体也没有(对于标签,传说等)。

有没有简单的方法让我的图表尊重用户选择的GTK主题?


你可以通过设置它,例如pylab.figure(facecolor=SOME_COLOR, ...)matplotlib.rcParams['figure.facecolor'] = SOME_COLOR 。 看起来它的默认值是硬编码的,所以无法告诉MPL尊重GTK主题。


这里有一个如何在PyGTK中做到这一点的具体例子。 这里的一些信息是从“获取当前gtk风格的颜色”和gdk.Color文档中搜集的。 我还没有设置字体等,但这显示了你需要的基本框架。

首先,定义以下功能:

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-event信号,我没有尝试),并在创建包含窗口小部件时重新着色图表:

graph_panel.connect('realize', set_graph_appearance, graph.figure)

(在这里, graph_panel是一个gtk.Alignmentgraphgtk.Alignment一个子类, FigureCanvasGTKAgg需要有一个figure成员。)

链接地址: http://www.djcxy.com/p/6469.html

上一篇: Getting Matplotlib's GTK Agg backend to respect user theming

下一篇: How to emulate "extending a class" with database tables?