我正在編寫一個使用Matplotlib進行圖形繪製的PyGTK/Twisted應用程序。使用FigureCanvasGtkAgg嵌入我的小部件很容易,但我注意到畫布的背景顏色(繪圖區域本身之外)與我的應用程序的其餘部分不匹配,並且字體也沒有(對於標籤,傳說等)。獲取Matplotlib的GTK Agg後端以尊重用戶主題
有沒有簡單的方法讓我的圖表尊重用戶選擇的GTK主題?
我正在編寫一個使用Matplotlib進行圖形繪製的PyGTK/Twisted應用程序。使用FigureCanvasGtkAgg嵌入我的小部件很容易,但我注意到畫布的背景顏色(繪圖區域本身之外)與我的應用程序的其餘部分不匹配,並且字體也沒有(對於標籤,傳說等)。獲取Matplotlib的GTK Agg後端以尊重用戶主題
有沒有簡單的方法讓我的圖表尊重用戶選擇的GTK主題?
您可以通過設置它,例如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)
然後,您可以連接到realize
信號(也許還有map-event
信號,我沒有嘗試)和重彩的圖形時,含有小部件是創建:
graph_panel.connect('realize', set_graph_appearance, graph.figure)
(這裏,graph_panel
是gtk.Alignment
和被的FigureCanvasGTKAgg
一個子類,其具有根據需要figure
構件。)
我非常想看看你的代碼,因爲我試圖將pyplots放在我的小部件中,或者更確切地說,只是在GUI中使用圖形 – heltonbiker 2011-07-12 21:16:31
@heltonbiker - 你會必須等待幾天,但是當我再次訪問代碼時,我會發布樣本。 – detly 2011-07-12 21:55:16