2011-04-18 31 views
1

我需要畫一個圖。我使用gtk.Curve小部件。當我加了他很長的矢量它給了我這個錯誤:PyGTK曲線記憶錯誤

GLib-ERROR **: /build/buildd/glib2.0-2.26.1/glib/gmem.c:170: failed to allocate 4294967276 bytes aborting...

的代碼很簡單:

w = gtk.Window() 
c = gtk.Curve() 
c.set_vector(v) 
c.set_curve_type(gtk.CURVE_TYPE_SPLINE) 
w.add(c) 
w.show_all() 
gtk.main() 

的載體是一個長長的清單:

[0.80000000000000004, 0.29999999999999999, 0.29999999999999999, 0.80000000000000004, 0.90000000000000002, 0.20000000000000001, ...]

約800元在這個列表中。任何人都可以知道最新的問題? thx

回答

1

我不知道爲什麼,但gtk.Curve似乎無法操作主循環之外的數據。嘗試類似這樣的方式在主呼叫後添加數據。

import random, gtk, gobject 

def createCurve(c): 
    v = [random.random() for i in range(800)] 
    c.set_vector(v) 
    c.set_curve_type(gtk.CURVE_TYPE_SPLINE) 
    return True 

c = gtk.Curve() 
vb = gtk.VBox() 
vb.pack_start(c, True, True) 
w = gtk.Window() 
w.add(vb) 
w.show_all() 
gobject.timeout_add(2000, createCurve, c) 
gtk.main() 
+0

它運作良好,但我不知道爲什麼**曲線**只顯示幾個點,向量有800點。 [屏幕快照](http://www.st.fmph.uniba.sk/~magyar2/Images/test.png) – microo8 2011-04-19 06:14:02

+0

@ microo8,它顯示的是「合適」的點數,而不是原始數據。如果切換到gtk.CURVE_TYPE_FREE,您可以看到每個單獨的點。 – Mark 2011-04-19 13:59:01