web-dev-qa-db-fra.com

Création d'une fenêtre Gtk avec masque de forme d'entrée dans python

J'essaie de créer une fenêtre Gtk3 avec un masque de saisie personnalisé, afin que la fenêtre ne reçoive aucun clic de souris. Ceci est un morceau de code que j'ai trouvé:

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w , h)
surface_ctx = cairo.Context(surface)
surface_ctx.set_source_rgba(1.0, 1.0, 1.0, 0.0)
surface_ctx.set_operator(cairo.OPERATOR_SOURCE)
surface_ctx.Paint()
reg = Gdk.cairo_region_create_from_surface(surface)
widget.input_shape_combine_region(reg)

Malheureusement, l'appel à Gdk.cairo_region_create_from_surface () échoue avec cette erreur:

Traceback (most recent call last):
  File "../kazam/frontend/window_region.py", line 144, in cb_draw reg = Gdk.cairo_region_create_from_surface(surface)
  File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function return info.invoke(*args, **kwargs)
TypeError: Couldn't find conversion for foreign struct 'cairo.Region'

Après avoir inspecté le fichier Gdk-3.0.gir, je suis quelque peu déconcerté. De toute évidence, je fais quelque chose de mal (ou il y a quelque chose de mal avec l'introspection?). Tout conseil sera apprécié.

4
BigWhale

Malheureusement, certains objets du Caire ne sont pas encore introspection:

https://mail.gnome.org/archives/python-hackers-list/2011-December/msg00004.html

Si vous vous sentez aventureux, vous pouvez essayer d'ajouter du soutien par vous-même. Sinon, vous devez trouver une solution de contournement.

4
Marcelo Hashimoto