Найти - Пользователи
Полная версия: установка рисунка из объекта (PIL) в виджет GtkImage (pyGTK)
Начало » GUI » установка рисунка из объекта (PIL) в виджет GtkImage (pyGTK)
1
pythonwin
Всем привет!

пожалуйста, подскажите как объект созданный в PIL отобразить через pyGTK (виджет == GtkImage) ?

и какую библиотеку создания/прорисовки/хранения рекомендуется использовать с pyGTK
Mkdir
Имхо, самый простой способ - это сперва сохранить сгенерированное изображение, а затем подгрузить и вставить его через GtkImage =)
pythonwin
Mkdir
Имхо, самый простой способ - это сперва сохранить сгенерированное изображение, а затем подгрузить и вставить его через GtkImage smile
спасибо, но это не решение к сожелению - прийдется создавать очень много файлов за короткий период времени, а это снижение скорости выполнения + возможные ошибки из-за недостатка места
Mkdir
pythonwin
прийдется создавать очень много файлов за короткий период времени, а это снижение скорости выполнения + возможные ошибки из-за недостатка места
Тогда да. Если честно, то другого варианта даже не знаю )
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)
pythonwin
в чём дело? код просто питон выключает :(
пожалуйста, подскажите :)
>>> 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.)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB