Создание прозрачности Gtk.Window?

Вот мой код, и я просто не могу понять, почему мое окно верхнего уровня не становится прозрачным.

xwininfo говорит, что окна имеют 32-битную глубину. Я запускаю Ubuntu 11.10, и если я вызову .set_opacity (.5) в самом окне, он станет прозрачным. Но все содержимое окна тоже. Мне нужен прозрачный фон, но виджеты должны оставаться непрозрачными.

Я просмотрел код notify-osd, и они вызывают set_opacity в главном окне. Тем не менее, я не могу понять, почему другие виджеты на osd остаются непрозрачными. Вот код:

#!/usr/bin/env python

from gi.repository import Gtk, Gdk

class MyWin (Gtk.Window):
    def __init__(self):
        super(MyWin, self).__init__()
        self.set_position(Gtk.WindowPosition.CENTER)
        self.set_border_width(30)
        self.screen = self.get_screen()
        self.visual = self.screen.get_rgba_visual()
        if self.visual != None and self.screen.is_composited():
            print "yay"
            self.set_visual(self.visual)

        box = Gtk.Box()
        btn1 = Gtk.Button(label="foo")
        box.add(btn1)
        self.add(box)

        self.set_app_paintable(True)
        self.connect("draw", self.area_draw)
        self.show_all()

    def area_draw(self, widget, cr):
        cr.set_source_rgba(0, 0, 0, .3)
        cr.paint()

#    def screen_changed(self, widget, cr):
#        self.screen = widget.get_screen()
#        self.visual = self.screen.get_rgba_visual()
#        if self.visual != None and self.screen.is_composited():
#            self.set_visual(self.visual)

MyWin()
Gtk.main()
6
задан 16 January 2012 в 01:56

0 ответов

Другие вопросы по тегам:

Похожие вопросы: