Создать RGBA Colormap в PyGTK - PullRequest
       37

Создать RGBA Colormap в PyGTK

4 голосов
/ 20 октября 2011

У меня есть проект на Python 2.7 и PyGTK.

Мне нужно создать прозрачное фоновое окно, но я все еще могу отображать изображения (на основе растровых изображений и маски) и другие объекты внутри окна.

Я использую следующий код, но в Ubuntu (Oneric Ocelot) не отображаются объекты изображения, и я получаю сообщение об ошибке, опубликованное ниже (хотя в противном случае отображается окно с объектами-кнопками).Это даже не будет отображаться в Windows 7 (эта ошибка также опубликована ниже).

def expose(widget, event):
            cr = widget.window.cairo_create()

            # Sets the operator to clear which deletes everything below where an object is drawn
            cr.set_operator(cairo.OPERATOR_CLEAR)
            # Makes the mask fill the entire window
            cr.rectangle(0.0, 0.0, *widget.get_size())
            # Deletes everything in the window (since the compositing operator is clear and mask fills the entire window
            cr.fill()
            # Set the compositing operator back to the default
            cr.set_operator(cairo.OPERATOR_OVER)

        hab_fish_win = gtk.Window()
        hab_fish_win.resize(640, 480)
        hab_fish_win.set_resizable(False)
        hab_fish_win.set_decorated(False)
        hab_fish_win.set_has_frame(False)
        hab_fish_win.set_position(gtk.WIN_POS_CENTER)
        hab_fish_win.set_app_paintable(True)
        screen = hab_fish_win.get_screen()
        rgba = screen.get_rgba_colormap()
        hab_fish_win.set_colormap(rgba)
        hab_fish_win.connect('expose-event', expose)

        hab_fish_win.show()

WINDOWS 7 RUN:

Traceback (последний вызов был последним): Файл "C: \ Users \ user \ MousePaw Games \ Word4Word \ PYM \ fishtest2.py ", строка 337, в файле HAB_FISH () Файл" C: \ Users \ user \ MousePaw Games \ Word4Word \ PYM \ fishtest2.py ", строка 100, в init hab_fish_win.set_colormap (rgba) TypeError: Gtk.Widget.set_colormap () аргумент 1 должен быть gtk.gdk.Colormap, а не None

Быстрый «print rgba» подтверждаетчто rgba имеет значение «None», то есть ошибка.

UBUNTU «ONERIC OCELOT» RUN:

Gtk Предупреждение: попытка нарисовать чертеж с глубиной 24 до рисования с глубиной 32

Что происходит?Мне очень нужен прозрачный фон для окна.

1 Ответ

3 голосов
/ 28 октября 2011

Хорошо, после нескольких часов исследований я обнаружил, что Windows не поддерживает такого рода прозрачность. Что касается ошибки Linux, я не знаю.

Я портирую на PyGObject и использую другой метод для своих целей. Я бы посоветовал читателям этого ответа изучить его.

...