2011-04-29 5 views
7

私はグラフ作成にMatplotlibを使用するPyGTK/Twistedアプリケーションを作成しています。 FigureCanvasGtkAggを使用して私のウィジェットにプロットを埋め込むのは簡単ですが、(プロット領域の外側にある)キャンバスの背景色が他のアプリケーションと同じではなく、 、伝説など)。MatplotlibのGTK Aggバックエンドでユーザーテーマを尊重する

グラフをユーザーが選択したGTKテーマに尊重する簡単な方法はありますか?

+0

私のウィジェットにパイロットを入れようとしているので、あなたのコードを見てみたいと思います。より正確には、GUI内で使う数字だけを持っています。 – heltonbiker

+0

@heltonbiker - あなたは数日待たなければなりませんが、コードに再度アクセスするとサンプルを投稿します。 – detly

答えて

3

たとえば、pylab.figure(facecolor=SOME_COLOR, ...)またはmatplotlib.rcParams['figure.facecolor'] = SOME_COLORなどで設定できます。デフォルト値はhard-codedなので、MPLにGTKテーマを尊重するよう指示する方法はありません。


これはPyGTKでこれを行う方法の具体例です。この情報の一部は"Get colors of current gtk style"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) 

あなたはその後、(多分もmap-event信号が、私は試していない)realize信号に接続することができますが、再色のグラフです。作成:

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

(ここで、graph_panelは、必要に応じてfigure部材を有するFigureCanvasGTKAggのサブクラスはgtk.Alignmentとされている。)

+3

素晴らしい!これは私を始めました。そのため、描画時に背景をウィジェットのGTKテーマに変更する実装方法を示すコードを追加しました。唯一の問題は、グラフが描画された後にユーザーがテーマを変更すると、グラフの色が変わらないことです。私はそれが無視するのに十分小さいと判断します。 – detly

+0

素晴らしい!フォローアップのためのThnaks。 – tkf

関連する問題