#python #memory #pygtk
#python #память #pygtk
Вопрос:
мне нужно нарисовать график. и я использую gtk.Виджет кривой для этого. и когда я добавляю ему длинный вектор, он выдает мне эту ошибку:
GLib-ОШИБКА **: /build/buildd/glib2.0-2.26.1/glib/gmem.c:170: не удалось выделить 4294967276 байт при прерывании…
код прост:
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 элементов. кто-нибудь может знать, в чем проблема? спасибо
Ответ №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()
Комментарии:
1. это работает хорошо, но я не знаю, почему кривая показывает всего несколько точек, а вектор имеет 800 точек. СКРИНШОТ
2. @microo8, он показывает вам «подогнанные» точки, а не исходные данные. Если вы переключитесь на gtk. CURVE_TYPE_FREE, вы можете видеть каждую отдельную точку.