Форум сайта python.su
Всем привет!
пожалуйста, подскажите как объект созданный в PIL отобразить через pyGTK (виджет == GtkImage) ?
и какую библиотеку создания/прорисовки/хранения рекомендуется использовать с pyGTK
Офлайн
Имхо, самый простой способ - это сперва сохранить сгенерированное изображение, а затем подгрузить и вставить его через GtkImage =)
Офлайн
Mkdirспасибо, но это не решение к сожелению - прийдется создавать очень много файлов за короткий период времени, а это снижение скорости выполнения + возможные ошибки из-за недостатка места
Имхо, самый простой способ - это сперва сохранить сгенерированное изображение, а затем подгрузить и вставить его через GtkImage smile
Офлайн
pythonwinТогда да. Если честно, то другого варианта даже не знаю )
прийдется создавать очень много файлов за короткий период времени, а это снижение скорости выполнения + возможные ошибки из-за недостатка места
Офлайн
подшаманил пример из
http://www.async.com.br/faq/pygtk/index.py…e=faq08.007.htp
размер нужный, только сам рисунок не отображается :(
формируется рисунок:
import Image ##import Image._imageing from random import random from random import randint from math import ceil maxit = 70 max_rand = 10 magnify = 65 x_shift = 170 y_shift = 10 img = Image.new('RGB', (400, 680), (0, 0, 0)) for iterat in xrange(30000): x = (random() * max_rand) / 50000.0 y = (random() * max_rand) / 50000.0 for i in xrange(maxit): rand_num = ceil(random() * max_rand * 100) / 100 if rand_num < 0.01 * max_rand: x = 0 y = 0.16 * y elif rand_num < 0.86 * max_rand: x = (0.85 * x) + (0.04 * y) y = (-0.04 * x) + (0.85 * y) + 1.6 elif rand_num < 0.93 * max_rand: x = (0.2 * x) - (0.26 * y) y = (0.23 * x) + (0.22 * y) + 1.6 else: x = (-0.15 * x) + (0.28 * y) y = (0.26 * x) + (0.24 * y) + 0.44 if (x >= -5.0) and (x <= 5.0) and (y >= 0.0) and (y <= 10.0): x = int(x * magnify) + x_shift y = int(y * magnify) + y_shift r = randint(0, 128) g = randint(128, 255) b = randint(0, 128) try: img.putpixel((x, y), (r, g, b)) except IndexError: passimg.save('fern.jpg')
self.imageFoto = self.wTree.get_widget('imageFoto') i = img w, h = i.size imagestr = i.tostring() pixmap = gtk.gdk.Pixmap(self.imageFoto.window, w, h, 0) gc = self.imageFoto.style.fg_gc[gtk.STATE_NORMAL] x=y=0 help(pixmap.draw_rgb_image) self.imageFoto.set_from_pixmap(pixmap, None)
Отредактировано (Фев. 13, 2007 14:49:09)
Офлайн
в чём дело? код просто питон выключает :(
пожалуйста, подскажите :)
>>> from datetime import datetime >>> import PIL.Image, model, Numeric >>> try: ... import pygtk ... pygtk.require("2.0") ... except: ... pass ... >>> try: ... import gtk ... import gtk.glade ... except: ... sys.exit(1) ... >>> class VisitWidget(object): ... gladefile = '/home/pythonwin/Desktop/GTK//template/project1.glade' ... window_name = 'window1' ... def __init__(self, **kw): ... self.wTree = gtk.glade.XML(self.gladefile, self.window_name) ... dic = {'on_window1_delete_event':self.close_application} ... self.set_date() ... self.wTree.signal_autoconnect(dic) ... def close_application(self, widget, event, data=None): ... gtk.main_quit() ... return False ... def set_date(self): ... self.imageFoto = self.wTree.get_widget('imageFoto') ... i = PIL.Image.open('/home/pythonwin/Desktop/GTK/fern.jpg') ... w, h = i.size ... imagestr = i.tostring() ... pixmap = gtk.gdk.Pixmap(self.imageFoto.window, w, w, 1) ... gc = self.imageFoto.style.fg_gc[gtk.STATE_NORMAL] ... x=y=0 ... buff=imagestr ... pixmap.draw_rgb_image(gc, x, y, w, h, gtk.gdk.RGB_DITHER_NONE, buff) ... self.imageFoto.set_from_pixmap(pixmap, None) ... >>> someclass = VisitWidget() __main__:21: GtkWarning: The gdk_draw_*_image require the drawable argument to have a specified colormap. All windows have a colormap, however, pixmaps only have colormap by default if they were created with a non-NULL window argument. Otherwise a colormap must be set on them with gdk_drawable_set_colormap >>> gtk.main() The program '.' received an X Window System error. This probably reflects a bug in the program. The error was 'BadMatch (invalid parameter attributes)'. (Details: serial 226 error_code 8 request_code 62 minor_code 0) (Note to programmers: normally, X errors are reported asynchronously; that is, you will receive the error a while after causing it. To debug your program, run it with the --sync command line option to change this behavior. You can then get a meaningful backtrace from your debugger if you break on the gdk_x_error() function.)
Офлайн