在PyGTK中创建RGBA色彩映射

时间:2011-10-20 04:19:47

标签: window transparency pygtk cairo rgba

我有一个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:

  

回溯(最近一次调用最后一次):文件“C:\ Users \ user \ MousePaw   游戏\ 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,而不是   无

快速“打印rgba”确认rgba为“无”,因此错误。

UBUNTU“ONERIC OCELOT”RUN:

  

Gtk警告:尝试将深度为24的绘图绘制到深度为32的可绘制

发生了什么事?我迫切需要窗户的透明背景。

1 个答案:

答案 0 :(得分:3)

好的,经过数小时的研究,我发现Windows不支持这种透明性。至于Linux错误,我不知道。

我正在移植到PyGObject,并为我的目的使用另一种方法。我建议读者回答这个问题。