Всем привет. Имеется такой код на питоне (большой частью тянутый из различных туториалов), который по идее должен рисовать полупрозрачное окно:
#!/usr/bin/env python

import sys
import pygtk
pygtk.require('2.0')
import gobject
import gtk
import cairo
from gtk import gdk

size_x = 300
size_y = 75

position_x = 100
position_y = 200

win = None

def expose(widget, event):

  ctx = widget.window.cairo_create()

  ctx.set_source_rgba(0.0, 0.0, 0.0, 0.3)

  ctx.set_operator(cairo.OPERATOR_SOURCE)
  ctx.paint()

  return False

def screen_changed(widget, old_screen = None):

  screen = widget.get_screen()
  colormap = screen.get_rgba_colormap()

  if colormap == None:
    print 'Your screen does not support alpha'
    colormap = screen.get_rgb_colormap()
  else:
    print 'Your screen supports alpha'

  widget.set_colormap(colormap)

  return True

def clicked(widget, event):
  gtk.main_quit()

def main(args):
  global win
  global size_x
  global size_y
  
  win = gtk.Window()

  win.set_title("test")
  win.set_app_paintable(True)
  win.set_decorated(False)

  win.resize(size_x, size_y)
  win.move(position_x, position_y)
  win.set_keep_above(True)

  win.connect("delete-event", gtk.main_quit)
  win.connect("expose-event", expose)
  win.connect("screen-changed", screen_changed)

  win.add_events(gdk.BUTTON_PRESS_MASK)
  win.connect('button-press-event', clicked)

  screen_changed(win)

  win.show_all()
  gtk.main()

  return True

if __name__ == "__main__":
  sys.exit(main(sys.argv))



На одной машине (Ubuntu 8.10) этот код, как и предполагалось, рисует полупрозрачное окно заданных размеров. На другой (тоже Ubuntu 8.10) — черное окно тех же размеров. На обоих машинах выдается сообщение 'Your screen supports alpha'. В чем может быть дело, куда копать?

Last edited Dec. 11, 2008, 7:54 a.m.

ым.. может это связано с , "for X an appropriate windowing manager and compositing manager must be running to provide appropriate display."

стоит делать проверку:
def screen_changed(widget, old_screen = None):
  if widget.is_composited():
    #support correct alpha
    ...

см http://www.pygtk.org/docs/pygtk/class-gtkwidget.html#method-gtkwidget--is-composited

Last edited Dec. 11, 2008, 2:28 p.m.

В точку. Уже сам нашел, но все равно спасибо :)