Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Matplotlib';s GTK Agg后端尊重用户主题_Matplotlib_Pygtk - Fatal编程技术网

获取Matplotlib';s GTK Agg后端尊重用户主题

获取Matplotlib';s GTK Agg后端尊重用户主题,matplotlib,pygtk,Matplotlib,Pygtk,我正在编写一个PyGTK/Twisted应用程序,它使用Matplotlib进行绘图。使用FigureCanvasGtkAgg在我的小部件中嵌入绘图非常容易,但是我注意到画布的背景颜色(绘图区域本身之外)与我的应用程序的其余部分不匹配,字体(标签、图例等)也不匹配 有没有一种简单的方法可以让我的图表尊重用户选择的GTK主题?您可以通过设置,例如或。看起来它的默认值是,所以没有办法告诉MPL尊重GTK主题 下面是一个在PyGTK中如何实现这一点的具体示例。这里的一些信息是从文档中收集的。我还没有

我正在编写一个PyGTK/Twisted应用程序,它使用Matplotlib进行绘图。使用FigureCanvasGtkAgg在我的小部件中嵌入绘图非常容易,但是我注意到画布的背景颜色(绘图区域本身之外)与我的应用程序的其余部分不匹配,字体(标签、图例等)也不匹配


有没有一种简单的方法可以让我的图表尊重用户选择的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主题。唯一的问题是,如果用户在绘制图形后更改了主题,图形将不会更改颜色。我认为这是一个足够小的边缘案例,可以忽略。太好了!谢谢你的跟进。