I have a project in Python 2.7 and PyGTK.
I need to create a transparent background window, but still be able to display images (pixmap and mask based) and other objects inside of the window.
I am using the following code, but no image objects are showing up in Ubuntu (Oneric Ocelot), and I'm getting an error, posted below, (though the window otherwise displays, with its button objects). This won't even render in Windows 7 (this error also posted below).
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 (most recent call last): File "C:\Users\user\MousePaw Games\Word4Word\PYM\fishtest2.py", line 337, in HAB_FISH() File "C:\Users\user\MousePaw Games\Word4Word\PYM\fishtest2.py", line 100, in init hab_fish_win.set_colormap(rgba) TypeError: Gtk.Widget.set_colormap() argument 1 must be gtk.gdk.Colormap, not None
A quick "print rgba" confirms that rgba is "None", thus the error.
UBUNTU "ONERIC OCELOT" RUN:
Gtk Warning: Attempt to draw a drawable with depth 24 to a drawable with depth 32
What is going on? I desperately need that transparent background for the window.
Okay, after hours of research, I have found that Windows does not support this sort of transparency. As for the Linux error, I don't know.
I'm porting to PyGObject, and using another method for my ends. I would suggest readers of this answer look into it.