2011-04-18 2 views
1

Мне нужно нарисовать график. и я использую виджет gtk.Curve для этого. и когда я добавить его длинный вектор дает мне эту ошибку:Ошибка памяти PyGTK Curve

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

это хорошо работает, но я не знаю, почему ** Curve ** показывает только несколько точек, а вектор имеет 800 точек. [SCREENSHOT] (http://www.st.fmph.uniba.sk/~magyar2/Images/test.png) – microo8

+0

@ microo8, он показывает вам «установленные» точки, а не необработанные данные. Если вы переключитесь на gtk.CURVE_TYPE_FREE, вы увидите каждую отдельную точку. – Mark